From 5e5e9fa98cd855e7018260e7903cde9d2b4ef96c Mon Sep 17 00:00:00 2001 From: WiredNerd Date: Sun, 7 Jan 2024 23:02:42 +0000 Subject: [PATCH] :robot: Update Coverage Report --- mutation-testing-report.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mutation-testing-report.json b/mutation-testing-report.json index 7c3b764..a0db72f 100644 --- a/mutation-testing-report.json +++ b/mutation-testing-report.json @@ -1 +1 @@ -{"mutant_trials": [{"mutant": {"mutator_name": "BinOp", "lineno": 82, "col_offset": 40, "end_lineno": 82, "end_col_offset": 47, "text": "idx - 1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ \"ordered\": lambda item, idx, count: idx - 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\nE AssertionError\n\ntest/test_core.py:462: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6762657165527344}, {"mutant": {"mutator_name": "BinOp", "lineno": 82, "col_offset": 40, "end_lineno": 82, "end_col_offset": 47, "text": "idx * 1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ \"ordered\": lambda item, idx, count: idx * 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\nE AssertionError\n\ntest/test_core.py:462: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6804220676422119}, {"mutant": {"mutator_name": "BinOp", "lineno": 83, "col_offset": 40, "end_lineno": 83, "end_col_offset": 51, "text": "count + idx", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:83\n@@ -80,7 +80,7 @@\n \n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n- \"reverse\": lambda item, idx, count: count - idx,\n+ \"reverse\": lambda item, idx, count: count + idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:447: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42352843284606934}, {"mutant": {"mutator_name": "BinOp", "lineno": 83, "col_offset": 40, "end_lineno": 83, "end_col_offset": 51, "text": "count / idx", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:83\n@@ -80,7 +80,7 @@\n \n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n- \"reverse\": lambda item, idx, count: count - idx,\n+ \"reverse\": lambda item, idx, count: count / idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:447: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.5571136474609375}, {"mutant": {"mutator_name": "BinOp", "lineno": 99, "col_offset": 15, "end_lineno": 99, "end_col_offset": 116, "text": "[score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] - [0]", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] - [0])\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\n\ntest/test_core.py:196: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-7/src/pytest_sort/core.py:113: in \n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbucket_id = 'tests'\n\n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n> return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] - [0])\nE TypeError: unsupported operand type(s) for -: 'list' and 'list'\n\n.poodle-temp/run-7/src/pytest_sort/core.py:99: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - TypeError: unsupported operand type(s) for -: 'list' and 'list'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.5308949947357178}, {"mutant": {"mutator_name": "BinOp", "lineno": 99, "col_offset": 15, "end_lineno": 99, "end_col_offset": 116, "text": "[score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] * [0]", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] * [0])\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\n\ntest/test_core.py:196: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-8/src/pytest_sort/core.py:113: in \n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbucket_id = 'tests'\n\n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n> return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] * [0])\nE TypeError: can't multiply sequence by non-int of type 'list'\n\n.poodle-temp/run-8/src/pytest_sort/core.py:99: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - TypeError: can't multiply sequence by non-int of type 'list'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.48307180404663086}, {"mutant": {"mutator_name": "BinOp", "lineno": 104, "col_offset": 15, "end_lineno": 104, "end_col_offset": 115, "text": "[score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] - [0]", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] - [0])\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-9/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-9/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-9/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-9/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-9/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] - [0])\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~\nINTERNALERROR> TypeError: unsupported operand type(s) for -: 'list' and 'list'\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.4281120300292969}, {"mutant": {"mutator_name": "BinOp", "lineno": 104, "col_offset": 15, "end_lineno": 104, "end_col_offset": 115, "text": "[score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] * [0]", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] * [0])\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-10/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-10/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-10/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-10/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-10/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] * [0])\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~\nINTERNALERROR> TypeError: can't multiply sequence by non-int of type 'list'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5703458786010742}, {"mutant": {"mutator_name": "BinOp", "lineno": 108, "col_offset": 45, "end_lineno": 108, "end_col_offset": 52, "text": "idx - 1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ \"ordered\": lambda bucket_id, idx, count: idx - 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\n assert core.SortConfig.item_bucket_id == {func.nodeid: \"test/core\"}\n> assert core.SortConfig.bucket_sort_keys == {\"test/core\": 7}\nE AssertionError\n\ntest/test_core.py:435: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6876189708709717}, {"mutant": {"mutator_name": "BinOp", "lineno": 108, "col_offset": 45, "end_lineno": 108, "end_col_offset": 52, "text": "idx * 1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ \"ordered\": lambda bucket_id, idx, count: idx * 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\n assert core.SortConfig.item_bucket_id == {func.nodeid: \"test/core\"}\n> assert core.SortConfig.bucket_sort_keys == {\"test/core\": 7}\nE AssertionError\n\ntest/test_core.py:435: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4260387420654297}, {"mutant": {"mutator_name": "BinOp", "lineno": 109, "col_offset": 45, "end_lineno": 109, "end_col_offset": 56, "text": "count + idx", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:109\n@@ -106,7 +106,7 @@\n \n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n- \"reverse\": lambda bucket_id, idx, count: count - idx,\n+ \"reverse\": lambda bucket_id, idx, count: count + idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________ TestCreateSortKey.test_mode_ordered_reverse __________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_ordered_reverse(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"reverse\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\n assert config.SortConfig.item_bucket_id == {func.nodeid: module.nodeid}\n> assert config.SortConfig.bucket_sort_keys == {module.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:477: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.30s ==========================\n\n"}, "duration": 0.6810321807861328}, {"mutant": {"mutator_name": "BinOp", "lineno": 109, "col_offset": 45, "end_lineno": 109, "end_col_offset": 56, "text": "count / idx", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:109\n@@ -106,7 +106,7 @@\n \n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n- \"reverse\": lambda bucket_id, idx, count: count - idx,\n+ \"reverse\": lambda bucket_id, idx, count: count / idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________ TestCreateSortKey.test_mode_ordered_reverse __________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_ordered_reverse(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"reverse\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\n assert config.SortConfig.item_bucket_id == {func.nodeid: module.nodeid}\n> assert config.SortConfig.bucket_sort_keys == {module.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:477: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4269719123840332}, {"mutant": {"mutator_name": "BinOp", "lineno": 252, "col_offset": 20, "end_lineno": 252, "end_col_offset": 64, "text": "max([len(nodeid) for nodeid in nodeids]) - 3", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:252\n@@ -249,7 +249,7 @@\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n- node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n+ node_id_width = max([len(nodeid) for nodeid in nodeids]) - 3\n stat_width = 16\n \n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6405119895935059}, {"mutant": {"mutator_name": "BinOp", "lineno": 252, "col_offset": 20, "end_lineno": 252, "end_col_offset": 64, "text": "max([len(nodeid) for nodeid in nodeids]) * 3", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:252\n@@ -249,7 +249,7 @@\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n- node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n+ node_id_width = max([len(nodeid) for nodeid in nodeids]) * 3\n stat_width = 16\n \n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.6598091125488281}, {"mutant": {"mutator_name": "BinOp", "lineno": 257, "col_offset": 32, "end_lineno": 257, "end_col_offset": 48, "text": "stat_width * 4 + 4", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width * 4 + 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6337814331054688}, {"mutant": {"mutator_name": "BinOp", "lineno": 257, "col_offset": 32, "end_lineno": 257, "end_col_offset": 48, "text": "stat_width * 4 / 4", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width * 4 / 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n> f\"{'Nanoseconds'.center(stat_width * 4 / 4)} ***\",\n )\nE TypeError: 'float' object cannot be interpreted as an integer\n\n.poodle-temp/run-18/src/pytest_sort/core.py:257: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: 'float' object cannot be interpreted as an integer\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4099266529083252}, {"mutant": {"mutator_name": "Compare", "lineno": 19, "col_offset": 3, "end_lineno": 19, "end_col_offset": 29, "text": "sys.version_info < (3, 9)", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info < (3, 9):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_38 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_38(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, __: False\n> importlib.reload(core)\n\ntest/test_core.py:36: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py:131: in reload\n _bootstrap._exec(spec, module)\n:866: in _exec\n ???\n:994: in exec_module\n ???\n:488: in _call_with_frames_removed\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n \"\"\"Core logic for pytest_sort plugin.\"\"\"\n \n from __future__ import annotations\n \n import hashlib\n import random\n import sys\n from functools import partial\n from typing import TYPE_CHECKING, Any, Callable\n \n import pytest\n from _pytest import nodes as pytest_nodes\n \n from pytest_sort.config import SortConfig\n from pytest_sort.database import get_all_totals, get_stats\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n> if sys.version_info < (3, 9):\nE TypeError: '<' not supported between instances of 'MagicMock' and 'tuple'\n\n.poodle-temp/run-19/src/pytest_sort/core.py:19: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_38 - TypeError: '<' not supported between instances of 'MagicMock' and 'tuple'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6988584995269775}, {"mutant": {"mutator_name": "Compare", "lineno": 19, "col_offset": 3, "end_lineno": 19, "end_col_offset": 29, "text": "sys.version_info > (3, 9)", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info > (3, 9):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_38 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_38(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, __: False\n> importlib.reload(core)\n\ntest/test_core.py:36: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py:131: in reload\n _bootstrap._exec(spec, module)\n:866: in _exec\n ???\n:994: in exec_module\n ???\n:488: in _call_with_frames_removed\n ???\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n \"\"\"Core logic for pytest_sort plugin.\"\"\"\n \n from __future__ import annotations\n \n import hashlib\n import random\n import sys\n from functools import partial\n from typing import TYPE_CHECKING, Any, Callable\n \n import pytest\n from _pytest import nodes as pytest_nodes\n \n from pytest_sort.config import SortConfig\n from pytest_sort.database import get_all_totals, get_stats\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n> if sys.version_info > (3, 9):\nE TypeError: '>' not supported between instances of 'MagicMock' and 'tuple'\n\n.poodle-temp/run-20/src/pytest_sort/core.py:19: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_38 - TypeError: '>' not supported between instances of 'MagicMock' and 'tuple'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6893248558044434}, {"mutant": {"mutator_name": "Compare", "lineno": 149, "col_offset": 7, "end_lineno": 149, "end_col_offset": 34, "text": "mode in create_item_key", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:149\n@@ -146,7 +146,7 @@\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n raise TypeError(msg) from e\n \n- if mode not in create_item_key:\n+ if mode in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n raise ValueError(msg)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______ TestValidateMarker.test_validate_sort_marker[args0-kwargs0-key0] _______\n\nself = \nargs = ['ordered', 'parent'], kwargs = {}, key = ('ordered', 'parent')\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([\"ordered\", \"parent\"], {}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {\"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([], {\"mode\": \"ordered\", \"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {}, (\"ordered\", \"self\")),\n ],\n )\n def test_validate_sort_marker(self, args, kwargs, key):\n sort_marker = mock.MagicMock()\n sort_marker.args = args\n sort_marker.kwargs = kwargs\n \n> assert core.validate_sort_marker(sort_marker, \"testnodeid\") == key\n\ntest/test_core.py:254: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n raise TypeError(msg) from e\n \n if mode in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'mode' on 'sort' marker. Value:ordered Target:testnodeid\n\n.poodle-temp/run-21/src/pytest_sort/core.py:151: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] - ValueError: Invalid Value for 'mode' on 'sort' marker. Value:ordered Target:testnodeid\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40302419662475586}, {"mutant": {"mutator_name": "Compare", "lineno": 185, "col_offset": 11, "end_lineno": 185, "end_col_offset": 32, "text": "bucket_temp != 'self'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:185\n@@ -182,7 +182,7 @@\n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n- if bucket_temp == \"self\":\n+ if bucket_temp != 'self':\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_sort_self _____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_self(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_ordered = mock.MagicMock()\n sort_ordered.args = [\"ordered\"]\n sort_ordered.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_ordered]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"ordered\", None, cls.nodeid, 10, 1)\n\ntest/test_core.py:363: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-22/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp != 'self':\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'bucket' on 'sort' marker: self. Target: tests/core/test_core.py::TestCoreStuff\n\n.poodle-temp/run-22/src/pytest_sort/core.py:193: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self - ValueError: Invalid Value for 'bucket' on 'sort' marker: self. Target: tests/core/test_core.py::TestCoreStuff\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.4154789447784424}, {"mutant": {"mutator_name": "Compare", "lineno": 187, "col_offset": 13, "end_lineno": 187, "end_col_offset": 44, "text": "bucket_temp not in create_bucket_id", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:187\n@@ -184,7 +184,7 @@\n \n if bucket_temp == \"self\":\n bucket_id = create_bucket_id_from_node(node)\n- elif bucket_temp in create_bucket_id:\n+ elif bucket_temp not in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestMarkerSettings.test_get_marker_settings_sort_bucket ____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_bucket(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"parent\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_random]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"random\", \"parent\", None, None, 1)\n\ntest/test_core.py:391: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-23/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp not in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'bucket' on 'sort' marker: parent. Target: tests/core/test_core.py::TestCoreStuff\n\n.poodle-temp/run-23/src/pytest_sort/core.py:193: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket - ValueError: Invalid Value for 'bucket' on 'sort' marker: parent. Target: tests/core/test_core.py::TestCoreStuff\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.660346269607544}, {"mutant": {"mutator_name": "Compare", "lineno": 205, "col_offset": 45, "end_lineno": 205, "end_col_offset": 120, "text": "item_sort_key and create_item_key[mode or SortConfig.mode](item, idx, count)", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:205\n@@ -202,7 +202,7 @@\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n- SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n+ SortConfig.item_sort_keys[item.nodeid] = item_sort_key and create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\nE AssertionError\n\ntest/test_core.py:433: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6552531719207764}, {"mutant": {"mutator_name": "Compare", "lineno": 207, "col_offset": 16, "end_lineno": 207, "end_col_offset": 80, "text": "bucket_id and create_bucket_id[bucket or SortConfig.bucket](item)", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:207\n@@ -204,7 +204,7 @@\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n- bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n+ bucket_id = bucket_id and create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-25/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-25/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-25/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-25/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-25/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: startswith first arg must be str or a tuple of str, not NoneType\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.359666109085083}, {"mutant": {"mutator_name": "Compare", "lineno": 210, "col_offset": 17, "end_lineno": 210, "end_col_offset": 100, "text": "bucket_sort_key and create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:210\n@@ -207,7 +207,7 @@\n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n- bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n+ bucket_key = bucket_sort_key and create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-26/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-26/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-26/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.36212778091430664}, {"mutant": {"mutator_name": "Compare", "lineno": 211, "col_offset": 7, "end_lineno": 211, "end_col_offset": 47, "text": "bucket_id not in SortConfig.bucket_sort_keys", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:211\n@@ -208,7 +208,7 @@\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n- if bucket_id in SortConfig.bucket_sort_keys:\n+ if bucket_id not in SortConfig.bucket_sort_keys:\n SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n SortConfig.bucket_sort_keys[bucket_id] = bucket_key\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-27/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-27/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-27/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\nINTERNALERROR> KeyError: 'test/test_config.py::TestSortConfig'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.571880578994751}, {"mutant": {"mutator_name": "Compare", "lineno": 226, "col_offset": 7, "end_lineno": 226, "end_col_offset": 72, "text": "SortConfig.mode == 'random' and SortConfig.bucket_mode == 'random'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:226\n@@ -223,7 +223,7 @@\n \n def sort_items(items: list[pytest.Item]) -> None:\n \"\"\"Reorder the items.\"\"\"\n- if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n+ if SortConfig.mode == 'random' and SortConfig.bucket_mode == 'random':\n random.seed(SortConfig.seed)\n \n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_random[random-ordered] _____________\n\nself = , mode = 'random'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"random\", \"ordered\"),\n (\"ordered\", \"random\"),\n (\"random\", \"random\"),\n ],\n )\n def test_sort_items_random(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n> random.seed.assert_called_with(12345)\n\ntest/test_core.py:648: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (12345,)\nkwargs = {}, expected = 'seed(12345)', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: seed(12345)\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: seed(12345)\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_random[random-ordered] - AssertionError: expected call not found.\nExpected: seed(12345)\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.29s ==========================\n\n"}, "duration": 0.6564624309539795}, {"mutant": {"mutator_name": "Compare", "lineno": 229, "col_offset": 7, "end_lineno": 229, "end_col_offset": 74, "text": "SortConfig.mode == 'diffcov' and SortConfig.bucket_mode == 'diffcov'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:229\n@@ -226,7 +226,7 @@\n if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n random.seed(SortConfig.seed)\n \n- if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n+ if SortConfig.mode == 'diffcov' and SortConfig.bucket_mode == 'diffcov':\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_diffcov[diffcov-ordered] ____________\n\nself = , mode = 'diffcov'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"diffcov\", \"ordered\"),\n (\"ordered\", \"diffcov\"),\n (\"diffcov\", \"diffcov\"),\n ],\n )\n def test_sort_items_diffcov(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_diff_test_scores.assert_called()\n\ntest/test_core.py:682: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_diff_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] - AssertionError: Expected 'get_diff_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.33s ==========================\n\n"}, "duration": 0.6005856990814209}, {"mutant": {"mutator_name": "Compare", "lineno": 232, "col_offset": 7, "end_lineno": 232, "end_col_offset": 72, "text": "SortConfig.mode == 'mutcov' and SortConfig.bucket_mode == 'mutcov'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:232\n@@ -229,7 +229,7 @@\n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n- if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n+ if SortConfig.mode == 'mutcov' and SortConfig.bucket_mode == 'mutcov':\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] FAILED [ 4%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_mutcov[mutcov-ordered] _____________\n\nself = , mode = 'mutcov'\nbucket_mode = 'ordered', random = \nget_mut_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"mutcov\", \"ordered\"),\n (\"ordered\", \"mutcov\"),\n (\"mutcov\", \"mutcov\"),\n ],\n )\n def test_sort_items_mutcov(\n self,\n mode,\n bucket_mode,\n random,\n get_mut_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_mut_test_scores.assert_called()\n\ntest/test_core.py:715: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_mut_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] - AssertionError: Expected 'get_mut_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 7 passed in 0.21s ==========================\n\n"}, "duration": 0.5731725692749023}, {"mutant": {"mutator_name": "Compare", "lineno": 235, "col_offset": 7, "end_lineno": 235, "end_col_offset": 74, "text": "SortConfig.mode == 'fastest' and SortConfig.bucket_mode == 'fastest'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:235\n@@ -232,7 +232,7 @@\n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n- if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n+ if SortConfig.mode == 'fastest' and SortConfig.bucket_mode == 'fastest':\n SortConfig.item_totals = get_all_totals()\n \n for idx, item in enumerate(items):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_fastest[fastest-ordered] ____________\n\nself = , mode = 'fastest'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"fastest\", \"ordered\"),\n (\"ordered\", \"fastest\"),\n (\"fastest\", \"fastest\"),\n ],\n )\n def test_sort_items_fastest(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n get_diff_test_scores.assert_not_called()\n> get_all_totals.assert_called_with()\n\ntest/test_core.py:749: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = ()\nkwargs = {}, expected = 'get_all_totals()', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: get_all_totals()\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: get_all_totals()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] - AssertionError: expected call not found.\nExpected: get_all_totals()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.36s =========================\n\n"}, "duration": 0.6324353218078613}, {"mutant": {"mutator_name": "Keyword", "lineno": 20, "col_offset": 57, "end_lineno": 20, "end_col_offset": 62, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:20\n@@ -17,7 +17,7 @@\n \n md5: Callable = hashlib.md5\n if sys.version_info >= (3, 9):\n- md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n+ md5: Callable = partial(hashlib.md5, usedforsecurity=True) # type: ignore[no-redef]\n \n \n if TYPE_CHECKING:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n assert isinstance(core.md5, partial)\n assert core.md5.func == mock_md5\n> assert core.md5.keywords == {\"usedforsecurity\": False}\nE AssertionError\n\ntest/test_core.py:44: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.495952844619751}, {"mutant": {"mutator_name": "Keyword", "lineno": 163, "col_offset": 11, "end_lineno": 163, "end_col_offset": 15, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:163\n@@ -160,7 +160,7 @@\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n- mode = None\n+ mode = ' '\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-33/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-33/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-33/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: ' '\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5634603500366211}, {"mutant": {"mutator_name": "Keyword", "lineno": 164, "col_offset": 13, "end_lineno": 164, "end_col_offset": 17, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:164\n@@ -161,7 +161,7 @@\n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n- bucket = None\n+ bucket = ' '\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-34/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-34/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-34/src/pytest_sort/core.py\", line 207, in create_sort_keys\nINTERNALERROR> bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\nINTERNALERROR> ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: ' '\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5613574981689453}, {"mutant": {"mutator_name": "Keyword", "lineno": 165, "col_offset": 16, "end_lineno": 165, "end_col_offset": 20, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:165\n@@ -162,7 +162,7 @@\n \"\"\"\n mode = None\n bucket = None\n- bucket_id = None\n+ bucket_id = ' '\n bucket_sort_key = None\n item_sort_key = None\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (None, None, None, None, 1)\nE AssertionError\n\ntest/test_core.py:289: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.17s ===============================\n\n"}, "duration": 0.45322108268737793}, {"mutant": {"mutator_name": "Keyword", "lineno": 166, "col_offset": 22, "end_lineno": 166, "end_col_offset": 26, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:166\n@@ -163,7 +163,7 @@\n mode = None\n bucket = None\n bucket_id = None\n- bucket_sort_key = None\n+ bucket_sort_key = ' '\n item_sort_key = None\n \n node_id = node.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (None, None, None, None, 1)\nE AssertionError\n\ntest/test_core.py:289: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6377508640289307}, {"mutant": {"mutator_name": "Keyword", "lineno": 167, "col_offset": 20, "end_lineno": 167, "end_col_offset": 24, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:167\n@@ -164,7 +164,7 @@\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n- item_sort_key = None\n+ item_sort_key = ' '\n \n node_id = node.nodeid\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 0%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 1%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 1%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 2%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 2%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers FAILED [ 3%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_no_markers ____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_no_markers(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.get_marker_settings(func) == (None, None, None, None, None)\nE AssertionError\n\ntest/test_core.py:396: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 5 passed in 0.29s ==========================\n\n"}, "duration": 0.6784863471984863}, {"mutant": {"mutator_name": "Keyword", "lineno": 189, "col_offset": 24, "end_lineno": 189, "end_col_offset": 28, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:189\n@@ -186,7 +186,7 @@\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n- bucket_id = None\n+ bucket_id = ' '\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestMarkerSettings.test_get_marker_settings_sort_bucket ____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_bucket(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"parent\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_random]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"random\", \"parent\", None, None, 1)\nE AssertionError\n\ntest/test_core.py:391: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40267419815063477}, {"mutant": {"mutator_name": "Keyword", "lineno": 190, "col_offset": 30, "end_lineno": 190, "end_col_offset": 34, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:190\n@@ -187,7 +187,7 @@\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n- bucket_sort_key = None\n+ bucket_sort_key = ' '\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestMarkerSettings.test_get_marker_settings_sort_bucket ____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_bucket(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"parent\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_random]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"random\", \"parent\", None, None, 1)\nE AssertionError\n\ntest/test_core.py:391: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.41214609146118164}, {"mutant": {"mutator_name": "Number", "lineno": 19, "col_offset": 24, "end_lineno": 19, "end_col_offset": 25, "text": "4", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info >= (4, 9):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n> assert isinstance(core.md5, partial)\nE AssertionError\n\ntest/test_core.py:42: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.28s ==========================\n\n"}, "duration": 0.6504871845245361}, {"mutant": {"mutator_name": "Number", "lineno": 19, "col_offset": 24, "end_lineno": 19, "end_col_offset": 25, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info >= (2, 9):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n> assert isinstance(core.md5, partial)\nE AssertionError\n\ntest/test_core.py:42: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.27s ==========================\n\n"}, "duration": 0.6518125534057617}, {"mutant": {"mutator_name": "Number", "lineno": 19, "col_offset": 27, "end_lineno": 19, "end_col_offset": 28, "text": "10", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info >= (3, 10):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n> assert isinstance(core.md5, partial)\nE AssertionError\n\ntest/test_core.py:42: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.16s ==========================\n\n"}, "duration": 0.4133334159851074}, {"mutant": {"mutator_name": "Number", "lineno": 19, "col_offset": 27, "end_lineno": 19, "end_col_offset": 28, "text": "8", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:19\n@@ -16,7 +16,7 @@\n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n \n md5: Callable = hashlib.md5\n-if sys.version_info >= (3, 9):\n+if sys.version_info >= (3, 8):\n md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n> assert isinstance(core.md5, partial)\nE AssertionError\n\ntest/test_core.py:42: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.28s ==========================\n\n"}, "duration": 0.658959150314331}, {"mutant": {"mutator_name": "Number", "lineno": 82, "col_offset": 46, "end_lineno": 82, "end_col_offset": 47, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ \"ordered\": lambda item, idx, count: idx + 2,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\nE AssertionError\n\ntest/test_core.py:462: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42424654960632324}, {"mutant": {"mutator_name": "Number", "lineno": 82, "col_offset": 46, "end_lineno": 82, "end_col_offset": 47, "text": "0", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ \"ordered\": lambda item, idx, count: idx + 0,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\nE AssertionError\n\ntest/test_core.py:462: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6726012229919434}, {"mutant": {"mutator_name": "Number", "lineno": 86, "col_offset": 80, "end_lineno": 86, "end_col_offset": 81, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:86\n@@ -83,7 +83,7 @@\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n- \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n+ \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 1),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 3%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 6%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest FAILED [ 6%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_fastest ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_fastest(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"fastest\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:157: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 11 passed in 0.24s =========================\n\n"}, "duration": 0.5041036605834961}, {"mutant": {"mutator_name": "Number", "lineno": 86, "col_offset": 80, "end_lineno": 86, "end_col_offset": 81, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:86\n@@ -83,7 +83,7 @@\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n- \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n+ \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, -1),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 3%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 6%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest FAILED [ 6%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_fastest ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_fastest(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"fastest\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:157: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 11 passed in 0.41s =========================\n\n"}, "duration": 0.7934486865997314}, {"mutant": {"mutator_name": "Number", "lineno": 87, "col_offset": 84, "end_lineno": 87, "end_col_offset": 85, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:87\n@@ -84,7 +84,7 @@\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n- \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n+ \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 1),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_diffcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_diffcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"diffcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:164: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.27s ==========================\n\n"}, "duration": 0.6580853462219238}, {"mutant": {"mutator_name": "Number", "lineno": 87, "col_offset": 84, "end_lineno": 87, "end_col_offset": 85, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:87\n@@ -84,7 +84,7 @@\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n- \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n+ \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, -1),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_diffcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_diffcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"diffcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:164: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4200778007507324}, {"mutant": {"mutator_name": "Number", "lineno": 88, "col_offset": 82, "end_lineno": 88, "end_col_offset": 83, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:88\n@@ -85,7 +85,7 @@\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n- \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n+ \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 1),\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateBucketId.test_create_item_key_mutcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_mutcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"mutcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:171: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.16s ==========================\n\n"}, "duration": 0.42114901542663574}, {"mutant": {"mutator_name": "Number", "lineno": 88, "col_offset": 82, "end_lineno": 88, "end_col_offset": 83, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:88\n@@ -85,7 +85,7 @@\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n- \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n+ \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, -1),\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateBucketId.test_create_item_key_mutcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_mutcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"mutcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:171: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6647045612335205}, {"mutant": {"mutator_name": "Number", "lineno": 99, "col_offset": 114, "end_lineno": 99, "end_col_offset": 115, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [1])\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6358473300933838}, {"mutant": {"mutator_name": "Number", "lineno": 99, "col_offset": 114, "end_lineno": 99, "end_col_offset": 115, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [-1])\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4040839672088623}, {"mutant": {"mutator_name": "Number", "lineno": 104, "col_offset": 113, "end_lineno": 104, "end_col_offset": 114, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [1])\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_bucket_key_mutcov _______________\n\nself = \n\n def test_create_bucket_key_mutcov(self):\n core.SortConfig.mut_cov_scores = {}\n> assert core.create_bucket_key[\"mutcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:206: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6366543769836426}, {"mutant": {"mutator_name": "Number", "lineno": 104, "col_offset": 113, "end_lineno": 104, "end_col_offset": 114, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [-1])\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_bucket_key_mutcov _______________\n\nself = \n\n def test_create_bucket_key_mutcov(self):\n core.SortConfig.mut_cov_scores = {}\n> assert core.create_bucket_key[\"mutcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:206: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.635514497756958}, {"mutant": {"mutator_name": "Number", "lineno": 108, "col_offset": 51, "end_lineno": 108, "end_col_offset": 52, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ \"ordered\": lambda bucket_id, idx, count: idx + 2,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\n assert core.SortConfig.item_bucket_id == {func.nodeid: \"test/core\"}\n> assert core.SortConfig.bucket_sort_keys == {\"test/core\": 7}\nE AssertionError\n\ntest/test_core.py:435: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4241304397583008}, {"mutant": {"mutator_name": "Number", "lineno": 108, "col_offset": 51, "end_lineno": 108, "end_col_offset": 52, "text": "0", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ \"ordered\": lambda bucket_id, idx, count: idx + 0,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\n assert core.SortConfig.item_bucket_id == {func.nodeid: \"test/core\"}\n> assert core.SortConfig.bucket_sort_keys == {\"test/core\": 7}\nE AssertionError\n\ntest/test_core.py:435: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42914485931396484}, {"mutant": {"mutator_name": "Number", "lineno": 252, "col_offset": 63, "end_lineno": 252, "end_col_offset": 64, "text": "4", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:252\n@@ -249,7 +249,7 @@\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n- node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n+ node_id_width = max([len(nodeid) for nodeid in nodeids]) + 4\n stat_width = 16\n \n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7132041454315186}, {"mutant": {"mutator_name": "Number", "lineno": 252, "col_offset": 63, "end_lineno": 252, "end_col_offset": 64, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:252\n@@ -249,7 +249,7 @@\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n- node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n+ node_id_width = max([len(nodeid) for nodeid in nodeids]) + 2\n stat_width = 16\n \n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.712407112121582}, {"mutant": {"mutator_name": "Number", "lineno": 253, "col_offset": 17, "end_lineno": 253, "end_col_offset": 19, "text": "17", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:253\n@@ -250,7 +250,7 @@\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n- stat_width = 16\n+ stat_width = 17\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.4523146152496338}, {"mutant": {"mutator_name": "Number", "lineno": 253, "col_offset": 17, "end_lineno": 253, "end_col_offset": 19, "text": "15", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:253\n@@ -250,7 +250,7 @@\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n- stat_width = 16\n+ stat_width = 15\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7185354232788086}, {"mutant": {"mutator_name": "Number", "lineno": 257, "col_offset": 43, "end_lineno": 257, "end_col_offset": 44, "text": "5", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width*5 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7167363166809082}, {"mutant": {"mutator_name": "Number", "lineno": 257, "col_offset": 43, "end_lineno": 257, "end_col_offset": 44, "text": "3", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width*3 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4444570541381836}, {"mutant": {"mutator_name": "Number", "lineno": 257, "col_offset": 47, "end_lineno": 257, "end_col_offset": 48, "text": "5", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width*4 - 5)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4485032558441162}, {"mutant": {"mutator_name": "Number", "lineno": 257, "col_offset": 47, "end_lineno": 257, "end_col_offset": 48, "text": "3", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width*4 - 3)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7170460224151611}, {"mutant": {"mutator_name": "String", "lineno": 30, "col_offset": 35, "end_lineno": 30, "end_col_offset": 48, "text": "'XX__init__.pyXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:30\n@@ -27,7 +27,7 @@\n def create_bucket_id_from_node(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract portion of nodeid needed for bucket key.\"\"\"\n if isinstance(node, pytest.Package):\n- return node.nodeid.replace(\"__init__.py\", \"\")\n+ return node.nodeid.replace('XX__init__.pyXX', \"\")\n \n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Package-test/__init__.py-test/] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6457743644714355}, {"mutant": {"mutator_name": "String", "lineno": 30, "col_offset": 50, "end_lineno": 30, "end_col_offset": 52, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:30\n@@ -27,7 +27,7 @@\n def create_bucket_id_from_node(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract portion of nodeid needed for bucket key.\"\"\"\n if isinstance(node, pytest.Package):\n- return node.nodeid.replace(\"__init__.py\", \"\")\n+ return node.nodeid.replace(\"__init__.py\", 'XXXX')\n \n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Package-test/__init__.py-test/] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4115898609161377}, {"mutant": {"mutator_name": "String", "lineno": 35, "col_offset": 11, "end_lineno": 35, "end_col_offset": 13, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:35\n@@ -32,7 +32,7 @@\n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n \n- return \"\"\n+ return 'XXXX'\n \n \n def create_bucket_id_for_package(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Config-tests|-] ___\n\nself = \nnode_type = , nodeid = 'tests|', bucket_id = ''\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.649418830871582}, {"mutant": {"mutator_name": "String", "lineno": 46, "col_offset": 11, "end_lineno": 46, "end_col_offset": 13, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:46\n@@ -43,7 +43,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_package(node.parent)\n \n- return \"\"\n+ return 'XXXX'\n \n \n def create_bucket_id_for_module(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_package(session) == \"session\"\n assert core.create_bucket_id_for_package(package) == \"tests/core/\"\n assert core.create_bucket_id_for_package(module) == \"tests/core/\"\n assert core.create_bucket_id_for_package(cls) == \"tests/core/\"\n assert core.create_bucket_id_for_package(func) == \"tests/core/\"\n \n module.parent = None\n> assert core.create_bucket_id_for_package(module) == \"\"\nE AssertionError\n\ntest/test_core.py:104: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6530492305755615}, {"mutant": {"mutator_name": "String", "lineno": 57, "col_offset": 11, "end_lineno": 57, "end_col_offset": 13, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:57\n@@ -54,7 +54,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_module(node.parent)\n \n- return \"\"\n+ return 'XXXX'\n \n \n def create_bucket_id_for_class(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_module(session) == \"session\"\n assert core.create_bucket_id_for_module(package) == \"tests/core/\"\n assert core.create_bucket_id_for_module(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_module(cls) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_module(func) == \"tests/core/test_core.py\"\n \n cls.parent = None\n> assert core.create_bucket_id_for_module(cls) == \"\"\nE AssertionError\n\ntest/test_core.py:116: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40952110290527344}, {"mutant": {"mutator_name": "String", "lineno": 68, "col_offset": 11, "end_lineno": 68, "end_col_offset": 13, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:68\n@@ -65,7 +65,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_class(node.parent)\n \n- return \"\"\n+ return 'XXXX'\n \n \n create_bucket_id = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_class(session) == \"session\"\n assert core.create_bucket_id_for_class(package) == \"tests/core/\"\n assert core.create_bucket_id_for_class(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_class(cls) == \"tests/core/test_core.py::TestCoreStuff\"\n assert core.create_bucket_id_for_class(func) == \"tests/core/test_core.py::TestCoreStuff\"\n \n func.parent = None\n> assert core.create_bucket_id_for_class(func) == \"\"\nE AssertionError\n\ntest/test_core.py:128: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41420578956604004}, {"mutant": {"mutator_name": "String", "lineno": 72, "col_offset": 4, "end_lineno": 72, "end_col_offset": 13, "text": "'XXsessionXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:72\n@@ -69,7 +69,7 @@\n \n \n create_bucket_id = {\n- \"session\": lambda item: \"\",\n+ 'XXsessionXX': lambda item: \"\",\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id[\"session\"](func) == \"\"\nE KeyError: 'session'\n\ntest/test_core.py:135: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - KeyError: 'session'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6914968490600586}, {"mutant": {"mutator_name": "String", "lineno": 73, "col_offset": 4, "end_lineno": 73, "end_col_offset": 13, "text": "'XXpackageXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:73\n@@ -70,7 +70,7 @@\n \n create_bucket_id = {\n \"session\": lambda item: \"\",\n- \"package\": create_bucket_id_for_package,\n+ 'XXpackageXX': create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 3%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 5%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 6%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 6%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 7%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 8%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 8%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 9%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 9%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 10%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 10%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 11%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n> assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\nE KeyError: 'package'\n\ntest/test_core.py:136: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - KeyError: 'package'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 19 passed in 0.43s =========================\n\n"}, "duration": 0.8340592384338379}, {"mutant": {"mutator_name": "String", "lineno": 74, "col_offset": 4, "end_lineno": 74, "end_col_offset": 12, "text": "'XXmoduleXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:74\n@@ -71,7 +71,7 @@\n create_bucket_id = {\n \"session\": lambda item: \"\",\n \"package\": create_bucket_id_for_package,\n- \"module\": create_bucket_id_for_module,\n+ 'XXmoduleXX': create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse FAILED [ 3%]\n\n=================================== FAILURES ===================================\n_________________ TestCreateSortKey.test_mode_ordered_reverse __________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_ordered_reverse(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"reverse\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:473: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n> bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\nE KeyError: 'module'\n\n.poodle-temp/run-74/src/pytest_sort/core.py:207: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse - KeyError: 'module'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 5 passed in 0.20s ==========================\n\n"}, "duration": 0.45923852920532227}, {"mutant": {"mutator_name": "String", "lineno": 75, "col_offset": 4, "end_lineno": 75, "end_col_offset": 11, "text": "'XXclassXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:75\n@@ -72,7 +72,7 @@\n \"session\": lambda item: \"\",\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n- \"class\": create_bucket_id_for_class,\n+ 'XXclassXX': create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 2%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:443: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n> bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\nE KeyError: 'class'\n\n.poodle-temp/run-75/src/pytest_sort/core.py:207: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - KeyError: 'class'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.32s ==========================\n\n"}, "duration": 0.6212847232818604}, {"mutant": {"mutator_name": "String", "lineno": 76, "col_offset": 4, "end_lineno": 76, "end_col_offset": 14, "text": "'XXfunctionXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:76\n@@ -73,7 +73,7 @@\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n- \"function\": lambda item: item.nodeid,\n+ 'XXfunctionXX': lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\n assert core.create_bucket_id[\"module\"](func) == \"tests/core/test_core.py\"\n assert core.create_bucket_id[\"class\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id[\"function\"](func) == \"tests/core/test_core.py::TestCoreStuff::test_init\"\nE KeyError: 'function'\n\ntest/test_core.py:139: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - KeyError: 'function'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4924356937408447}, {"mutant": {"mutator_name": "String", "lineno": 77, "col_offset": 4, "end_lineno": 77, "end_col_offset": 12, "text": "'XXparentXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:77\n@@ -74,7 +74,7 @@\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n- \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n+ 'XXparentXX': lambda item: create_bucket_id_from_node(item.parent),\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-77/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-77/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-77/src/pytest_sort/core.py\", line 207, in create_sort_keys\nINTERNALERROR> bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\nINTERNALERROR> ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: 'parent'\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5568695068359375}, {"mutant": {"mutator_name": "String", "lineno": 78, "col_offset": 4, "end_lineno": 78, "end_col_offset": 17, "text": "'XXgrandparentXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:78\n@@ -75,7 +75,7 @@\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n- \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n+ 'XXgrandparentXX': lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n \n create_item_key = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\n assert core.create_bucket_id[\"module\"](func) == \"tests/core/test_core.py\"\n assert core.create_bucket_id[\"class\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n assert core.create_bucket_id[\"function\"](func) == \"tests/core/test_core.py::TestCoreStuff::test_init\"\n assert core.create_bucket_id[\"parent\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id[\"grandparent\"](func) == \"tests/core/test_core.py\"\nE KeyError: 'grandparent'\n\ntest/test_core.py:141: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - KeyError: 'grandparent'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.5736157894134521}, {"mutant": {"mutator_name": "String", "lineno": 72, "col_offset": 28, "end_lineno": 72, "end_col_offset": 30, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:72\n@@ -69,7 +69,7 @@\n \n \n create_bucket_id = {\n- \"session\": lambda item: \"\",\n+ \"session\": lambda item: 'XXXX',\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id[\"session\"](func) == \"\"\nE AssertionError\n\ntest/test_core.py:135: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.24s ==========================\n\n"}, "duration": 0.5264506340026855}, {"mutant": {"mutator_name": "String", "lineno": 82, "col_offset": 4, "end_lineno": 82, "end_col_offset": 13, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ 'XXorderedXX': lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:458: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nE KeyError: 'ordered'\n\n.poodle-temp/run-80/src/pytest_sort/core.py:205: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - KeyError: 'ordered'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.25s ==========================\n\n"}, "duration": 0.5754890441894531}, {"mutant": {"mutator_name": "String", "lineno": 83, "col_offset": 4, "end_lineno": 83, "end_col_offset": 13, "text": "'XXreverseXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:83\n@@ -80,7 +80,7 @@\n \n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n- \"reverse\": lambda item, idx, count: count - idx,\n+ 'XXreverseXX': lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:443: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nE KeyError: 'reverse'\n\n.poodle-temp/run-81/src/pytest_sort/core.py:205: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - KeyError: 'reverse'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.497788667678833}, {"mutant": {"mutator_name": "String", "lineno": 84, "col_offset": 4, "end_lineno": 84, "end_col_offset": 9, "text": "'XXmd5XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:84\n@@ -81,7 +81,7 @@\n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n- \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n+ 'XXmd5XX': lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n> assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\nE KeyError: 'md5'\n\ntest/test_core.py:150: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - KeyError: 'md5'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.5931911468505859}, {"mutant": {"mutator_name": "String", "lineno": 85, "col_offset": 4, "end_lineno": 85, "end_col_offset": 12, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:85\n@@ -82,7 +82,7 @@\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n- \"random\": lambda item, idx, count: random.random(),\n+ 'XXrandomXX': lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\n \n> assert 0 <= core.create_item_key[\"random\"](func, 5, 20) < 1\nE KeyError: 'random'\n\ntest/test_core.py:152: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - KeyError: 'random'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6656637191772461}, {"mutant": {"mutator_name": "String", "lineno": 86, "col_offset": 4, "end_lineno": 86, "end_col_offset": 13, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:86\n@@ -83,7 +83,7 @@\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n- \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n+ 'XXfastestXX': lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:504: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nE KeyError: 'fastest'\n\n.poodle-temp/run-84/src/pytest_sort/core.py:205: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - KeyError: 'fastest'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.18s ==========================\n\n"}, "duration": 0.4336824417114258}, {"mutant": {"mutator_name": "String", "lineno": 87, "col_offset": 4, "end_lineno": 87, "end_col_offset": 13, "text": "'XXdiffcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:87\n@@ -84,7 +84,7 @@\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n- \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n+ 'XXdiffcovXX': lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_diffcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_diffcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"diffcov\"](func, 5, 20) == 0\nE KeyError: 'diffcov'\n\ntest/test_core.py:164: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov - KeyError: 'diffcov'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6661033630371094}, {"mutant": {"mutator_name": "String", "lineno": 88, "col_offset": 4, "end_lineno": 88, "end_col_offset": 12, "text": "'XXmutcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:88\n@@ -85,7 +85,7 @@\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n- \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n+ 'XXmutcovXX': lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-86/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-86/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-86/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: 'mutcov'\n\n============================ no tests ran in 0.17s =============================\n\n"}, "duration": 0.5605359077453613}, {"mutant": {"mutator_name": "String", "lineno": 108, "col_offset": 4, "end_lineno": 108, "end_col_offset": 13, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ 'XXorderedXX': lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:429: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nE KeyError: 'ordered'\n\n.poodle-temp/run-87/src/pytest_sort/core.py:210: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - KeyError: 'ordered'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.18s ==========================\n\n"}, "duration": 0.43659162521362305}, {"mutant": {"mutator_name": "String", "lineno": 109, "col_offset": 4, "end_lineno": 109, "end_col_offset": 13, "text": "'XXreverseXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:109\n@@ -106,7 +106,7 @@\n \n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n- \"reverse\": lambda bucket_id, idx, count: count - idx,\n+ 'XXreverseXX': lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________ TestCreateSortKey.test_mode_ordered_reverse __________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_ordered_reverse(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"reverse\"\n (session, package, module, cls, func) = mock_objects\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:473: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nE KeyError: 'reverse'\n\n.poodle-temp/run-88/src/pytest_sort/core.py:210: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse - KeyError: 'reverse'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.30s ==========================\n\n"}, "duration": 0.6870760917663574}, {"mutant": {"mutator_name": "String", "lineno": 110, "col_offset": 4, "end_lineno": 110, "end_col_offset": 9, "text": "'XXmd5XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:110\n@@ -107,7 +107,7 @@\n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n- \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n+ 'XXmd5XX': lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_min_bucket_key_md5 ___________________\n\nself = \nmd5 = \nget_marker_settings = \nmock_objects = (, , , )\n\n @mock.patch(\"pytest_sort.core.md5\")\n def test_min_bucket_key_md5(self, md5, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"md5\"\n (session, package, module, cls, func) = mock_objects\n \n md5.return_value.digest.side_effect = [b\"DEF\", b\"ABC\", b\"GHI\"]\n \n> core.create_sort_keys(func, 0, 60)\n\ntest/test_core.py:533: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 0, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nE KeyError: 'md5'\n\n.poodle-temp/run-89/src/pytest_sort/core.py:210: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 - KeyError: 'md5'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42858266830444336}, {"mutant": {"mutator_name": "String", "lineno": 111, "col_offset": 4, "end_lineno": 111, "end_col_offset": 12, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:111\n@@ -108,7 +108,7 @@\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n- \"random\": lambda bucket_id, idx, count: random.random(),\n+ 'XXrandomXX': lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateBucketId.test_create_bucket_key ___________________\n\nself = \n\n def test_create_bucket_key(self):\n assert core.create_bucket_key[\"ordered\"](\"tests\", 5, 20) == 6\n assert core.create_bucket_key[\"reverse\"](\"tests\", 5, 20) == 15\n \n md5_value = md5(b\"tests\").digest()\n assert core.create_bucket_key[\"md5\"](\"tests\", 5, 20) == md5_value\n \n> assert 0 <= core.create_bucket_key[\"random\"](\"tests\", 5, 20) < 1\nE KeyError: 'random'\n\ntest/test_core.py:182: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key - KeyError: 'random'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.25s ==========================\n\n"}, "duration": 0.6221952438354492}, {"mutant": {"mutator_name": "String", "lineno": 112, "col_offset": 4, "end_lineno": 112, "end_col_offset": 13, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:112\n@@ -109,7 +109,7 @@\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n- \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n+ 'XXfastestXX': lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n> core.create_sort_keys(func, 6, 60)\n\ntest/test_core.py:504: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 6, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nE KeyError: 'fastest'\n\n.poodle-temp/run-91/src/pytest_sort/core.py:210: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - KeyError: 'fastest'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.31s ==========================\n\n"}, "duration": 0.5891814231872559}, {"mutant": {"mutator_name": "String", "lineno": 113, "col_offset": 4, "end_lineno": 113, "end_col_offset": 13, "text": "'XXdiffcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:113\n@@ -110,7 +110,7 @@\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n- \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n+ 'XXdiffcovXX': lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE KeyError: 'diffcov'\n\ntest/test_core.py:196: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - KeyError: 'diffcov'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6547415256500244}, {"mutant": {"mutator_name": "String", "lineno": 114, "col_offset": 4, "end_lineno": 114, "end_col_offset": 12, "text": "'XXmutcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:114\n@@ -111,7 +111,7 @@\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n- \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n+ 'XXmutcovXX': lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-93/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-93/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-93/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: 'mutcov'\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.36271190643310547}, {"mutant": {"mutator_name": "String", "lineno": 130, "col_offset": 16, "end_lineno": 130, "end_col_offset": 62, "text": "\"XXIncorrect arguments on marker 'order'. Target:XX\"", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:130\n@@ -127,7 +127,7 @@\n try:\n return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n except TypeError as e:\n- msg = f\"Incorrect arguments on marker 'order'. Target:{node_id}\"\n+ msg = f\"\"XXIncorrect arguments on marker 'order'. Target:XX\"{node_id}\"\n raise TypeError(msg) from e\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-94/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-94/src/pytest_sort/core.py\", line 130\n msg = f\"\"XXIncorrect arguments on marker 'order'. Target:XX\"{node_id}\"\n ^^^^^^^^^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.2918365001678467}, {"mutant": {"mutator_name": "String", "lineno": 140, "col_offset": 49, "end_lineno": 140, "end_col_offset": 55, "text": "'XXselfXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:140\n@@ -137,7 +137,7 @@\n Returns (mode, bucket)\n \"\"\"\n \n- def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n+ def mark_sort_parse(mode: str, bucket: str = 'XXselfXX') -> tuple:\n return (mode, bucket)\n \n try:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 0%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 1%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 1%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_______ TestValidateMarker.test_validate_sort_marker[args3-kwargs3-key3] _______\n\nself = \nargs = ['ordered'], kwargs = {}, key = ('ordered', 'self')\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([\"ordered\", \"parent\"], {}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {\"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([], {\"mode\": \"ordered\", \"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {}, (\"ordered\", \"self\")),\n ],\n )\n def test_validate_sort_marker(self, args, kwargs, key):\n sort_marker = mock.MagicMock()\n sort_marker.args = args\n sort_marker.kwargs = kwargs\n \n> assert core.validate_sort_marker(sort_marker, \"testnodeid\") == key\nE AssertionError\n\ntest/test_core.py:254: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.16s ==========================\n\n"}, "duration": 0.40802454948425293}, {"mutant": {"mutator_name": "String", "lineno": 146, "col_offset": 16, "end_lineno": 146, "end_col_offset": 61, "text": "\"XXIncorrect arguments on marker 'sort'. Target:XX\"", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:146\n@@ -143,7 +143,7 @@\n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n- msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n+ msg = f\"\"XXIncorrect arguments on marker 'sort'. Target:XX\"{node_id}\"\n raise TypeError(msg) from e\n \n if mode not in create_item_key:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-96/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-96/src/pytest_sort/core.py\", line 146\n msg = f\"\"XXIncorrect arguments on marker 'sort'. Target:XX\"{node_id}\"\n ^^^^^^^^^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.2896883487701416}, {"mutant": {"mutator_name": "String", "lineno": 150, "col_offset": 16, "end_lineno": 150, "end_col_offset": 65, "text": "\"XXInvalid Value for 'mode' on 'sort' marker. Value:XX\"", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:150\n@@ -147,7 +147,7 @@\n raise TypeError(msg) from e\n \n if mode not in create_item_key:\n- msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n+ msg = f\"\"XXInvalid Value for 'mode' on 'sort' marker. Value:XX\"{mode} Target:{node_id}\"\n raise ValueError(msg)\n \n return (mode, bucket_temp)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-97/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-97/src/pytest_sort/core.py\", line 150\n msg = f\"\"XXInvalid Value for 'mode' on 'sort' marker. Value:XX\"{mode} Target:{node_id}\"\n ^^^^^^^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.288013219833374}, {"mutant": {"mutator_name": "String", "lineno": 150, "col_offset": 71, "end_lineno": 150, "end_col_offset": 79, "text": "'XX Target:XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:150\n@@ -147,7 +147,7 @@\n raise TypeError(msg) from e\n \n if mode not in create_item_key:\n- msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n+ msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode}'XX Target:XX'{node_id}\"\n raise ValueError(msg)\n \n return (mode, bucket_temp)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestValidateMarker.test_validate_sort_marker_value_error ___________\n\nself = \n\n def test_validate_sort_marker_value_error(self):\n sort_marker = mock.MagicMock()\n sort_marker.args = [\"invalid\"]\n sort_marker.kwargs = {}\n \n with pytest.raises(\n ValueError, match=\"^Invalid Value for 'mode' on 'sort' marker. Value:invalid Target:testnodeid$\"\n ) as type_error:\n> core.validate_sort_marker(sort_marker, \"testnodeid\")\n\ntest/test_core.py:274: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n raise TypeError(msg) from e\n \n if mode not in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode}'XX Target:XX'{node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'mode' on 'sort' marker. Value:invalid'XX Target:XX'testnodeid\n\n.poodle-temp/run-98/src/pytest_sort/core.py:151: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_validate_sort_marker_value_error(self):\n sort_marker = mock.MagicMock()\n sort_marker.args = [\"invalid\"]\n sort_marker.kwargs = {}\n \n> with pytest.raises(\n ValueError, match=\"^Invalid Value for 'mode' on 'sort' marker. Value:invalid Target:testnodeid$\"\n ) as type_error:\nE AssertionError: Regex pattern did not match.\nE Regex: \"^Invalid Value for 'mode' on 'sort' marker. Value:invalid Target:testnodeid$\"\nE Input: \"Invalid Value for 'mode' on 'sort' marker. Value:invalid'XX Target:XX'testnodeid\"\n\ntest/test_core.py:271: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error - AssertionError: Regex pattern did not match.\n Regex: \"^Invalid Value for 'mode' on 'sort' marker. Value:invalid Target:testnodeid$\"\n Input: \"Invalid Value for 'mode' on 'sort' marker. Value:invalid'XX Target:XX'testnodeid\"\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.4219083786010742}, {"mutant": {"mutator_name": "String", "lineno": 174, "col_offset": 35, "end_lineno": 174, "end_col_offset": 42, "text": "'XXorderXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:174\n@@ -171,7 +171,7 @@\n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n- for order in node.iter_markers(\"order\"):\n+ for order in node.iter_markers('XXorderXX'):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n assert core.get_marker_settings(func) == (None, None, None, None, 1)\n \n> func.iter_markers.assert_has_calls(\n [\n mock.call(\"order\"),\n mock.call(\"sort\"),\n ]\n )\n\ntest/test_core.py:291: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('order'), call('sort')], any_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('order'), call('sort')]\nE Actual: [call('XXorderXX'), call('sort')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError: Calls not found.\nExpected: [call('order'), call('sort')]\n Actual: [call('XXorderXX'), call('sort')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7304427623748779}, {"mutant": {"mutator_name": "String", "lineno": 182, "col_offset": 34, "end_lineno": 182, "end_col_offset": 40, "text": "'XXsortXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:182\n@@ -179,7 +179,7 @@\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n- for sort in node.iter_markers(\"sort\"):\n+ for sort in node.iter_markers('XXsortXX'):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n assert core.get_marker_settings(func) == (None, None, None, None, 1)\n \n> func.iter_markers.assert_has_calls(\n [\n mock.call(\"order\"),\n mock.call(\"sort\"),\n ]\n )\n\ntest/test_core.py:291: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('order'), call('sort')], any_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('order'), call('sort')]\nE Actual: [call('order'), call('XXsortXX')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError: Calls not found.\nExpected: [call('order'), call('sort')]\n Actual: [call('order'), call('XXsortXX')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.728386640548706}, {"mutant": {"mutator_name": "String", "lineno": 185, "col_offset": 26, "end_lineno": 185, "end_col_offset": 32, "text": "'XXselfXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:185\n@@ -182,7 +182,7 @@\n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n- if bucket_temp == \"self\":\n+ if bucket_temp == 'XXselfXX':\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_sort_self _____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_self(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_ordered = mock.MagicMock()\n sort_ordered.args = [\"ordered\"]\n sort_ordered.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_ordered]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"ordered\", None, cls.nodeid, 10, 1)\n\ntest/test_core.py:363: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-101/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == 'XXselfXX':\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'bucket' on 'sort' marker: self. Target: tests/core/test_core.py::TestCoreStuff\n\n.poodle-temp/run-101/src/pytest_sort/core.py:193: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self - ValueError: Invalid Value for 'bucket' on 'sort' marker: self. Target: tests/core/test_core.py::TestCoreStuff\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.42017650604248047}, {"mutant": {"mutator_name": "String", "lineno": 192, "col_offset": 20, "end_lineno": 192, "end_col_offset": 65, "text": "\"XXInvalid Value for 'bucket' on 'sort' marker: XX\"", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:192\n@@ -189,7 +189,7 @@\n bucket_id = None\n bucket_sort_key = None\n else:\n- msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n+ msg = f\"\"XXInvalid Value for 'bucket' on 'sort' marker: XX\"{bucket_temp}. Target: {node_id}\"\n raise ValueError(msg)\n \n return (mode, bucket, bucket_id, bucket_sort_key, item_sort_key)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-102/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-102/src/pytest_sort/core.py\", line 192\n msg = f\"\"XXInvalid Value for 'bucket' on 'sort' marker: XX\"{bucket_temp}. Target: {node_id}\"\n ^^^^^^^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.19556164741516113}, {"mutant": {"mutator_name": "String", "lineno": 192, "col_offset": 78, "end_lineno": 192, "end_col_offset": 88, "text": "'XX. Target: XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:192\n@@ -189,7 +189,7 @@\n bucket_id = None\n bucket_sort_key = None\n else:\n- msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n+ msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}'XX. Target: XX'{node_id}\"\n raise ValueError(msg)\n \n return (mode, bucket, bucket_id, bucket_sort_key, item_sort_key)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestMarkerSettings.test_get_marker_settings_error _______________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_error(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"hello\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[], [sort_random]]\n \n with pytest.raises(\n ValueError, match=f\"^Invalid Value for 'bucket' on 'sort' marker: hello. Target: {module.nodeid}$\"\n ):\n> core.get_marker_settings(func)\n\ntest/test_core.py:410: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-103/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n.poodle-temp/run-103/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}'XX. Target: XX'{node_id}\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for 'bucket' on 'sort' marker: hello'XX. Target: XX'tests/core/test_core.py\n\n.poodle-temp/run-103/src/pytest_sort/core.py:193: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_error(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"hello\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[], [sort_random]]\n \n> with pytest.raises(\n ValueError, match=f\"^Invalid Value for 'bucket' on 'sort' marker: hello. Target: {module.nodeid}$\"\n ):\nE AssertionError: Regex pattern did not match.\nE Regex: \"^Invalid Value for 'bucket' on 'sort' marker: hello. Target: tests/core/test_core.py$\"\nE Input: \"Invalid Value for 'bucket' on 'sort' marker: hello'XX. Target: XX'tests/core/test_core.py\"\n\ntest/test_core.py:407: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_error - AssertionError: Regex pattern did not match.\n Regex: \"^Invalid Value for 'bucket' on 'sort' marker: hello. Target: tests/core/test_core.py$\"\n Input: \"Invalid Value for 'bucket' on 'sort' marker: hello'XX. Target: XX'tests/core/test_core.py\"\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.29s ===============================\n\n"}, "duration": 0.6785826683044434}, {"mutant": {"mutator_name": "String", "lineno": 226, "col_offset": 26, "end_lineno": 226, "end_col_offset": 34, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:226\n@@ -223,7 +223,7 @@\n \n def sort_items(items: list[pytest.Item]) -> None:\n \"\"\"Reorder the items.\"\"\"\n- if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n+ if SortConfig.mode == 'XXrandomXX' or SortConfig.bucket_mode == \"random\":\n random.seed(SortConfig.seed)\n \n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_random[random-ordered] _____________\n\nself = , mode = 'random'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"random\", \"ordered\"),\n (\"ordered\", \"random\"),\n (\"random\", \"random\"),\n ],\n )\n def test_sort_items_random(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n> random.seed.assert_called_with(12345)\n\ntest/test_core.py:648: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (12345,)\nkwargs = {}, expected = 'seed(12345)', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: seed(12345)\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: seed(12345)\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_random[random-ordered] - AssertionError: expected call not found.\nExpected: seed(12345)\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.33s ==========================\n\n"}, "duration": 0.7179362773895264}, {"mutant": {"mutator_name": "String", "lineno": 226, "col_offset": 64, "end_lineno": 226, "end_col_offset": 72, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:226\n@@ -223,7 +223,7 @@\n \n def sort_items(items: list[pytest.Item]) -> None:\n \"\"\"Reorder the items.\"\"\"\n- if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n+ if SortConfig.mode == \"random\" or SortConfig.bucket_mode == 'XXrandomXX':\n random.seed(SortConfig.seed)\n \n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_random[ordered-random] _____________\n\nself = , mode = 'ordered'\nbucket_mode = 'random', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"random\", \"ordered\"),\n (\"ordered\", \"random\"),\n (\"random\", \"random\"),\n ],\n )\n def test_sort_items_random(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n> random.seed.assert_called_with(12345)\n\ntest/test_core.py:648: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (12345,)\nkwargs = {}, expected = 'seed(12345)', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: seed(12345)\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: seed(12345)\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_random[ordered-random] - AssertionError: expected call not found.\nExpected: seed(12345)\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.20s ==========================\n\n"}, "duration": 0.44814443588256836}, {"mutant": {"mutator_name": "String", "lineno": 229, "col_offset": 26, "end_lineno": 229, "end_col_offset": 35, "text": "'XXdiffcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:229\n@@ -226,7 +226,7 @@\n if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n random.seed(SortConfig.seed)\n \n- if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n+ if SortConfig.mode == 'XXdiffcovXX' or SortConfig.bucket_mode == \"diffcov\":\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_diffcov[diffcov-ordered] ____________\n\nself = , mode = 'diffcov'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"diffcov\", \"ordered\"),\n (\"ordered\", \"diffcov\"),\n (\"diffcov\", \"diffcov\"),\n ],\n )\n def test_sort_items_diffcov(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_diff_test_scores.assert_called()\n\ntest/test_core.py:682: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_diff_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] - AssertionError: Expected 'get_diff_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.20s ==========================\n\n"}, "duration": 0.45775413513183594}, {"mutant": {"mutator_name": "String", "lineno": 229, "col_offset": 65, "end_lineno": 229, "end_col_offset": 74, "text": "'XXdiffcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:229\n@@ -226,7 +226,7 @@\n if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n random.seed(SortConfig.seed)\n \n- if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n+ if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == 'XXdiffcovXX':\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] FAILED [ 3%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_diffcov[ordered-diffcov] ____________\n\nself = , mode = 'ordered'\nbucket_mode = 'diffcov', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"diffcov\", \"ordered\"),\n (\"ordered\", \"diffcov\"),\n (\"diffcov\", \"diffcov\"),\n ],\n )\n def test_sort_items_diffcov(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_diff_test_scores.assert_called()\n\ntest/test_core.py:682: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_diff_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] - AssertionError: Expected 'get_diff_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 5 passed in 0.36s ==========================\n\n"}, "duration": 0.7435739040374756}, {"mutant": {"mutator_name": "String", "lineno": 232, "col_offset": 26, "end_lineno": 232, "end_col_offset": 34, "text": "'XXmutcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:232\n@@ -229,7 +229,7 @@\n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n- if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n+ if SortConfig.mode == 'XXmutcovXX' or SortConfig.bucket_mode == \"mutcov\":\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] FAILED [ 4%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_mutcov[mutcov-ordered] _____________\n\nself = , mode = 'mutcov'\nbucket_mode = 'ordered', random = \nget_mut_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"mutcov\", \"ordered\"),\n (\"ordered\", \"mutcov\"),\n (\"mutcov\", \"mutcov\"),\n ],\n )\n def test_sort_items_mutcov(\n self,\n mode,\n bucket_mode,\n random,\n get_mut_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_mut_test_scores.assert_called()\n\ntest/test_core.py:715: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_mut_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] - AssertionError: Expected 'get_mut_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 7 passed in 0.36s ==========================\n\n"}, "duration": 0.743553638458252}, {"mutant": {"mutator_name": "String", "lineno": 232, "col_offset": 64, "end_lineno": 232, "end_col_offset": 72, "text": "'XXmutcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:232\n@@ -229,7 +229,7 @@\n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n- if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n+ if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == 'XXmutcovXX':\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] FAILED [ 5%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_mutcov[ordered-mutcov] _____________\n\nself = , mode = 'ordered'\nbucket_mode = 'mutcov', random = \nget_mut_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"mutcov\", \"ordered\"),\n (\"ordered\", \"mutcov\"),\n (\"mutcov\", \"mutcov\"),\n ],\n )\n def test_sort_items_mutcov(\n self,\n mode,\n bucket_mode,\n random,\n get_mut_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_mut_test_scores.assert_called()\n\ntest/test_core.py:715: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_mut_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] - AssertionError: Expected 'get_mut_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 8 passed in 0.22s ==========================\n\n"}, "duration": 0.46838974952697754}, {"mutant": {"mutator_name": "String", "lineno": 235, "col_offset": 26, "end_lineno": 235, "end_col_offset": 35, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:235\n@@ -232,7 +232,7 @@\n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n- if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n+ if SortConfig.mode == 'XXfastestXX' or SortConfig.bucket_mode == \"fastest\":\n SortConfig.item_totals = get_all_totals()\n \n for idx, item in enumerate(items):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_fastest[fastest-ordered] ____________\n\nself = , mode = 'fastest'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"fastest\", \"ordered\"),\n (\"ordered\", \"fastest\"),\n (\"fastest\", \"fastest\"),\n ],\n )\n def test_sort_items_fastest(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n get_diff_test_scores.assert_not_called()\n> get_all_totals.assert_called_with()\n\ntest/test_core.py:749: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = ()\nkwargs = {}, expected = 'get_all_totals()', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: get_all_totals()\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: get_all_totals()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] - AssertionError: expected call not found.\nExpected: get_all_totals()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.38s =========================\n\n"}, "duration": 0.750251054763794}, {"mutant": {"mutator_name": "String", "lineno": 235, "col_offset": 65, "end_lineno": 235, "end_col_offset": 74, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:235\n@@ -232,7 +232,7 @@\n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n- if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n+ if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == 'XXfastestXX':\n SortConfig.item_totals = get_all_totals()\n \n for idx, item in enumerate(items):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 0%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 1%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 2%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 3%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 4%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 5%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 6%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_fastest[ordered-fastest] ____________\n\nself = , mode = 'ordered'\nbucket_mode = 'fastest', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"fastest\", \"ordered\"),\n (\"ordered\", \"fastest\"),\n (\"fastest\", \"fastest\"),\n ],\n )\n def test_sort_items_fastest(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n get_diff_test_scores.assert_not_called()\n> get_all_totals.assert_called_with()\n\ntest/test_core.py:749: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = ()\nkwargs = {}, expected = 'get_all_totals()', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: get_all_totals()\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: get_all_totals()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] - AssertionError: expected call not found.\nExpected: get_all_totals()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 11 passed in 0.38s =========================\n\n"}, "duration": 0.7692091464996338}, {"mutant": {"mutator_name": "String", "lineno": 249, "col_offset": 66, "end_lineno": 249, "end_col_offset": 68, "text": "'XXXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:249\n@@ -246,7 +246,7 @@\n \n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n- nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n+ nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats['XXXX']})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n> nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats['XXXX']})\nE KeyError: 'XXXX'\n\n.poodle-temp/run-112/src/pytest_sort/core.py:249: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - KeyError: 'XXXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40596818923950195}, {"mutant": {"mutator_name": "String", "lineno": 256, "col_offset": 10, "end_lineno": 256, "end_col_offset": 16, "text": "'XX\\n*** XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:256\n@@ -253,7 +253,7 @@\n stat_width = 16\n \n print(\n- f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n+ f\"'XX\\n*** XX'{'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call(\"'XX\\n*** XX'pytest-sort maximum recorded times Nanoseconds ***\"),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call(\"'XX\\n*** XX'pytest-sort maximum recorded times Nanoseconds ***\"),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.6343328952789307}, {"mutant": {"mutator_name": "String", "lineno": 256, "col_offset": 17, "end_lineno": 256, "end_col_offset": 53, "text": "'XXpytest-sort maximum recorded timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:256\n@@ -253,7 +253,7 @@\n stat_width = 16\n \n print(\n- f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n+ f\"\\n*** {'XXpytest-sort maximum recorded timesXX'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** XXpytest-sort maximum recorded timesXX Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** XXpytest-sort maximum recorded timesXX Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.45233631134033203}, {"mutant": {"mutator_name": "String", "lineno": 257, "col_offset": 11, "end_lineno": 257, "end_col_offset": 24, "text": "'XXNanosecondsXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'XXNanosecondsXX'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times XXNanosecondsXX ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times XXNanosecondsXX ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7129504680633545}, {"mutant": {"mutator_name": "String", "lineno": 257, "col_offset": 50, "end_lineno": 257, "end_col_offset": 54, "text": "'XX ***XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:257\n@@ -254,7 +254,7 @@\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n+ f\"{'Nanoseconds'.center(stat_width*4 - 4)}'XX ***XX'\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call(\"\\n*** pytest-sort maximum recorded times Nanoseconds 'XX ***XX'\"),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call(\"\\n*** pytest-sort maximum recorded times Nanoseconds 'XX ***XX'\"),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.718353271484375}, {"mutant": {"mutator_name": "String", "lineno": 260, "col_offset": 11, "end_lineno": 260, "end_col_offset": 22, "text": "'XXTest CaseXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:260\n@@ -257,7 +257,7 @@\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n- f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n+ f\"{'XXTest CaseXX'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('XXTest CaseXX setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('XXTest CaseXX setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.44633007049560547}, {"mutant": {"mutator_name": "String", "lineno": 260, "col_offset": 44, "end_lineno": 260, "end_col_offset": 45, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:260\n@@ -257,7 +257,7 @@\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n- f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n+ f\"{'Test Case'.ljust(node_id_width)}'XX XX'{'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call(\"Test Case 'XX XX' setup call teardown total\"),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call(\"Test Case 'XX XX' setup call teardown total\"),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.5706503391265869}, {"mutant": {"mutator_name": "String", "lineno": 260, "col_offset": 46, "end_lineno": 260, "end_col_offset": 53, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:260\n@@ -257,7 +257,7 @@\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n- f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n+ f\"{'Test Case'.ljust(node_id_width)} {'XXsetupXX'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case XXsetupXX call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case XXsetupXX call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.5908451080322266}, {"mutant": {"mutator_name": "String", "lineno": 260, "col_offset": 72, "end_lineno": 260, "end_col_offset": 73, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:260\n@@ -257,7 +257,7 @@\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n- f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n+ f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)}'XX XX'\"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call(\"Test Case setup'XX XX' call teardown total\"),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call(\"Test Case setup'XX XX' call teardown total\"),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.721879243850708}, {"mutant": {"mutator_name": "String", "lineno": 261, "col_offset": 11, "end_lineno": 261, "end_col_offset": 17, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:261\n@@ -258,7 +258,7 @@\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n+ f\"{'XXcallXX'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup XXcallXX teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup XXcallXX teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4441239833831787}, {"mutant": {"mutator_name": "String", "lineno": 261, "col_offset": 36, "end_lineno": 261, "end_col_offset": 37, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:261\n@@ -258,7 +258,7 @@\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n+ f\"{'call'.rjust(stat_width)}'XX XX'{'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call(\"Test Case setup call'XX XX' teardown total\"),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call(\"Test Case setup call'XX XX' teardown total\"),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.612032413482666}, {"mutant": {"mutator_name": "String", "lineno": 261, "col_offset": 38, "end_lineno": 261, "end_col_offset": 48, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:261\n@@ -258,7 +258,7 @@\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n+ f\"{'call'.rjust(stat_width)} {'XXteardownXX'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call XXteardownXX total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call XXteardownXX total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.6551015377044678}, {"mutant": {"mutator_name": "String", "lineno": 261, "col_offset": 67, "end_lineno": 261, "end_col_offset": 68, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:261\n@@ -258,7 +258,7 @@\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n+ f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)}'XX XX'{'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call(\"Test Case setup call teardown'XX XX' total\"),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call(\"Test Case setup call teardown'XX XX' total\"),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.29s ===============================\n\n"}, "duration": 0.6604599952697754}, {"mutant": {"mutator_name": "String", "lineno": 261, "col_offset": 69, "end_lineno": 261, "end_col_offset": 76, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:261\n@@ -258,7 +258,7 @@\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n+ f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'XXtotalXX'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown XXtotalXX'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown XXtotalXX'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.5255823135375977}, {"mutant": {"mutator_name": "String", "lineno": 265, "col_offset": 28, "end_lineno": 265, "end_col_offset": 35, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:265\n@@ -262,7 +262,7 @@\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n- setup_ns = f\"{stats['setup']:,}\"\n+ setup_ns = f\"{stats['XXsetupXX']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n> setup_ns = f\"{stats['XXsetupXX']:,}\"\nE KeyError: 'XXsetupXX'\n\n.poodle-temp/run-126/src/pytest_sort/core.py:265: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - KeyError: 'XXsetupXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.46341514587402344}, {"mutant": {"mutator_name": "String", "lineno": 265, "col_offset": 37, "end_lineno": 265, "end_col_offset": 38, "text": "'XX,XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:265\n@@ -262,7 +262,7 @@\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n- setup_ns = f\"{stats['setup']:,}\"\n+ setup_ns = f\"{stats['setup']:'XX,XX'}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n> setup_ns = f\"{stats['setup']:'XX,XX'}\"\nE ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n\n.poodle-temp/run-127/src/pytest_sort/core.py:265: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6148278713226318}, {"mutant": {"mutator_name": "String", "lineno": 266, "col_offset": 27, "end_lineno": 266, "end_col_offset": 33, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:266\n@@ -263,7 +263,7 @@\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n- call_ns = f\"{stats['call']:,}\"\n+ call_ns = f\"{stats['XXcallXX']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n> call_ns = f\"{stats['XXcallXX']:,}\"\nE KeyError: 'XXcallXX'\n\n.poodle-temp/run-128/src/pytest_sort/core.py:266: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - KeyError: 'XXcallXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6025879383087158}, {"mutant": {"mutator_name": "String", "lineno": 266, "col_offset": 35, "end_lineno": 266, "end_col_offset": 36, "text": "'XX,XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:266\n@@ -263,7 +263,7 @@\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n- call_ns = f\"{stats['call']:,}\"\n+ call_ns = f\"{stats['call']:'XX,XX'}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n> call_ns = f\"{stats['call']:'XX,XX'}\"\nE ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n\n.poodle-temp/run-129/src/pytest_sort/core.py:266: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5366692543029785}, {"mutant": {"mutator_name": "String", "lineno": 267, "col_offset": 31, "end_lineno": 267, "end_col_offset": 41, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:267\n@@ -264,7 +264,7 @@\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n- teardown_ns = f\"{stats['teardown']:,}\"\n+ teardown_ns = f\"{stats['XXteardownXX']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n> teardown_ns = f\"{stats['XXteardownXX']:,}\"\nE KeyError: 'XXteardownXX'\n\n.poodle-temp/run-130/src/pytest_sort/core.py:267: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - KeyError: 'XXteardownXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.6595320701599121}, {"mutant": {"mutator_name": "String", "lineno": 267, "col_offset": 43, "end_lineno": 267, "end_col_offset": 44, "text": "'XX,XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:267\n@@ -264,7 +264,7 @@\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n- teardown_ns = f\"{stats['teardown']:,}\"\n+ teardown_ns = f\"{stats['teardown']:'XX,XX'}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n> teardown_ns = f\"{stats['teardown']:'XX,XX'}\"\nE ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n\n.poodle-temp/run-131/src/pytest_sort/core.py:267: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.4084198474884033}, {"mutant": {"mutator_name": "String", "lineno": 268, "col_offset": 28, "end_lineno": 268, "end_col_offset": 35, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:268\n@@ -265,7 +265,7 @@\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n- total_ns = f\"{stats['total']:,}\"\n+ total_ns = f\"{stats['XXtotalXX']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n> total_ns = f\"{stats['XXtotalXX']:,}\"\nE KeyError: 'XXtotalXX'\n\n.poodle-temp/run-132/src/pytest_sort/core.py:268: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - KeyError: 'XXtotalXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6562981605529785}, {"mutant": {"mutator_name": "String", "lineno": 268, "col_offset": 37, "end_lineno": 268, "end_col_offset": 38, "text": "'XX,XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:268\n@@ -265,7 +265,7 @@\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n- total_ns = f\"{stats['total']:,}\"\n+ total_ns = f\"{stats['total']:'XX,XX'}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n> total_ns = f\"{stats['total']:'XX,XX'}\"\nE ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n\n.poodle-temp/run-133/src/pytest_sort/core.py:268: ValueError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - ValueError: Invalid format specifier ''XX,XX'' for object of type 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.41205739974975586}, {"mutant": {"mutator_name": "String", "lineno": 270, "col_offset": 43, "end_lineno": 270, "end_col_offset": 44, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:270\n@@ -267,7 +267,7 @@\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n- f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n+ f\"{nodeid.ljust(node_id_width)}'XX XX'{setup_ns.rjust(stat_width)} \"\n f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n )\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call(\"function_1 'XX XX' 100 200 300 600\"),\nE call(\"function_2 'XX XX' 100,000 200,000 300,000 600,000\"),\nE call(\"function_3 'XX XX' 1,000,000 2,000,000 3,000,000 6,000,000\"),\nE call(\"function_4 'XX XX' 1 2 3 6\")]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call(\"function_1 'XX XX' 100 200 300 600\"),\n call(\"function_2 'XX XX' 100,000 200,000 300,000 600,000\"),\n call(\"function_3 'XX XX' 1,000,000 2,000,000 3,000,000 6,000,000\"),\n call(\"function_4 'XX XX' 1 2 3 6\")]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7388215065002441}, {"mutant": {"mutator_name": "String", "lineno": 270, "col_offset": 72, "end_lineno": 270, "end_col_offset": 73, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:270\n@@ -267,7 +267,7 @@\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n- f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n+ f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)}'XX XX'\"\n f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n )\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call(\"function_1 100'XX XX' 200 300 600\"),\nE call(\"function_2 100,000'XX XX' 200,000 300,000 600,000\"),\nE call(\"function_3 1,000,000'XX XX' 2,000,000 3,000,000 6,000,000\"),\nE call(\"function_4 1'XX XX' 2 3 6\")]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call(\"function_1 100'XX XX' 200 300 600\"),\n call(\"function_2 100,000'XX XX' 200,000 300,000 600,000\"),\n call(\"function_3 1,000,000'XX XX' 2,000,000 3,000,000 6,000,000\"),\n call(\"function_4 1'XX XX' 2 3 6\")]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.44928622245788574}, {"mutant": {"mutator_name": "String", "lineno": 271, "col_offset": 41, "end_lineno": 271, "end_col_offset": 42, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:271\n@@ -268,7 +268,7 @@\n total_ns = f\"{stats['total']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n- f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n+ f\"{call_ns.rjust(stat_width)}'XX XX'{teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n )\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call(\"function_1 100 200'XX XX' 300 600\"),\nE call(\"function_2 100,000 200,000'XX XX' 300,000 600,000\"),\nE call(\"function_3 1,000,000 2,000,000'XX XX' 3,000,000 6,000,000\"),\nE call(\"function_4 1 2'XX XX' 3 6\")]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call(\"function_1 100 200'XX XX' 300 600\"),\n call(\"function_2 100,000 200,000'XX XX' 300,000 600,000\"),\n call(\"function_3 1,000,000 2,000,000'XX XX' 3,000,000 6,000,000\"),\n call(\"function_4 1 2'XX XX' 3 6\")]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7212545871734619}, {"mutant": {"mutator_name": "String", "lineno": 271, "col_offset": 73, "end_lineno": 271, "end_col_offset": 74, "text": "'XX XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:271\n@@ -268,7 +268,7 @@\n total_ns = f\"{stats['total']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n- f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n+ f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)}'XX XX'{total_ns.rjust(stat_width)}\",\n )\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call(\"function_1 100 200 300'XX XX' 600\"),\nE call(\"function_2 100,000 200,000 300,000'XX XX' 600,000\"),\nE call(\"function_3 1,000,000 2,000,000 3,000,000'XX XX' 6,000,000\"),\nE call(\"function_4 1 2 3'XX XX' 6\")]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call(\"function_1 100 200 300'XX XX' 600\"),\n call(\"function_2 100,000 200,000 300,000'XX XX' 600,000\"),\n call(\"function_3 1,000,000 2,000,000 3,000,000'XX XX' 6,000,000\"),\n call(\"function_4 1 2 3'XX XX' 6\")]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4552149772644043}, {"mutant": {"mutator_name": "String", "lineno": 277, "col_offset": 10, "end_lineno": 277, "end_col_offset": 30, "text": "'XX\\nTest Case Order:XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:277\n@@ -274,7 +274,7 @@\n \n def print_test_case_order(items: list[pytest.Item]) -> None:\n \"\"\"Print test items sort data: bucket_key, bucket_id, item_key, item_id.\"\"\"\n- print(\"\\nTest Case Order:\")\n+ print('XX\\nTest Case Order:XX')\n print(\"(bucket_key, bucket_id, item_key, item_id)\")\n for item in items:\n node_id = item.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('XX\\nTest Case Order:XX'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('XX\\nTest Case Order:XX'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.35s ===============================\n\n"}, "duration": 0.7337336540222168}, {"mutant": {"mutator_name": "String", "lineno": 278, "col_offset": 10, "end_lineno": 278, "end_col_offset": 54, "text": "'XX(bucket_key, bucket_id, item_key, item_id)XX'", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:278\n@@ -275,7 +275,7 @@\n def print_test_case_order(items: list[pytest.Item]) -> None:\n \"\"\"Print test items sort data: bucket_key, bucket_id, item_key, item_id.\"\"\"\n print(\"\\nTest Case Order:\")\n- print(\"(bucket_key, bucket_id, item_key, item_id)\")\n+ print('XX(bucket_key, bucket_id, item_key, item_id)XX')\n for item in items:\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('\\nTest Case Order:'),\nE call('XX(bucket_key, bucket_id, item_key, item_id)XX'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('\\nTest Case Order:'),\n call('XX(bucket_key, bucket_id, item_key, item_id)XX'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.734271764755249}, {"mutant": {"mutator_name": "FuncCall", "lineno": 20, "col_offset": 20, "end_lineno": 20, "end_col_offset": 63, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:20\n@@ -17,7 +17,7 @@\n \n md5: Callable = hashlib.md5\n if sys.version_info >= (3, 9):\n- md5: Callable = partial(hashlib.md5, usedforsecurity=False) # type: ignore[no-redef]\n+ md5: Callable = None # type: ignore[no-redef]\n \n \n if TYPE_CHECKING:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_39 FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestImports.test_import_md5_39 ________________________\n\nself = \nversion_info = \nmock_md5 = \n\n def test_import_md5_39(self, version_info, mock_md5):\n version_info.__ge__ = lambda _, v: v == (3, 9)\n importlib.reload(core)\n> assert isinstance(core.md5, partial)\nE AssertionError\n\ntest/test_core.py:42: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestImports::test_import_md5_39 - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.42606163024902344}, {"mutant": {"mutator_name": "FuncCall", "lineno": 29, "col_offset": 7, "end_lineno": 29, "end_col_offset": 39, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:29\n@@ -26,7 +26,7 @@\n \n def create_bucket_id_from_node(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract portion of nodeid needed for bucket key.\"\"\"\n- if isinstance(node, pytest.Package):\n+ if None:\n return node.nodeid.replace(\"__init__.py\", \"\")\n \n if isinstance(node, pytest_nodes.Node):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Package-test/__init__.py-test/] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.650022029876709}, {"mutant": {"mutator_name": "FuncCall", "lineno": 30, "col_offset": 15, "end_lineno": 30, "end_col_offset": 53, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:30\n@@ -27,7 +27,7 @@\n def create_bucket_id_from_node(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract portion of nodeid needed for bucket key.\"\"\"\n if isinstance(node, pytest.Package):\n- return node.nodeid.replace(\"__init__.py\", \"\")\n+ return None\n \n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Package-test/__init__.py-test/] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41289305686950684}, {"mutant": {"mutator_name": "FuncCall", "lineno": 32, "col_offset": 7, "end_lineno": 32, "end_col_offset": 42, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:32\n@@ -29,7 +29,7 @@\n if isinstance(node, pytest.Package):\n return node.nodeid.replace(\"__init__.py\", \"\")\n \n- if isinstance(node, pytest_nodes.Node):\n+ if None:\n return node.nodeid\n \n return \"\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/__init__.py'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6514217853546143}, {"mutant": {"mutator_name": "FuncCall", "lineno": 40, "col_offset": 7, "end_lineno": 40, "end_col_offset": 57, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:40\n@@ -37,7 +37,7 @@\n \n def create_bucket_id_for_package(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract package name from pytest item.\"\"\"\n- if isinstance(node, (pytest.Session, pytest.Package)):\n+ if None:\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_package(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:97: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41838502883911133}, {"mutant": {"mutator_name": "FuncCall", "lineno": 41, "col_offset": 15, "end_lineno": 41, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:41\n@@ -38,7 +38,7 @@\n def create_bucket_id_for_package(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract package name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_package(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_package(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:97: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.49898457527160645}, {"mutant": {"mutator_name": "FuncCall", "lineno": 43, "col_offset": 7, "end_lineno": 43, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:43\n@@ -40,7 +40,7 @@\n if isinstance(node, (pytest.Session, pytest.Package)):\n return create_bucket_id_from_node(node)\n \n- if isinstance(node, (pytest_nodes.Node)):\n+ if None:\n return create_bucket_id_for_package(node.parent)\n \n return \"\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_package(session) == \"session\"\n assert core.create_bucket_id_for_package(package) == \"tests/core/\"\n> assert core.create_bucket_id_for_package(module) == \"tests/core/\"\nE AssertionError\n\ntest/test_core.py:99: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6533620357513428}, {"mutant": {"mutator_name": "FuncCall", "lineno": 44, "col_offset": 15, "end_lineno": 44, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:44\n@@ -41,7 +41,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_package(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_package(session) == \"session\"\n assert core.create_bucket_id_for_package(package) == \"tests/core/\"\n> assert core.create_bucket_id_for_package(module) == \"tests/core/\"\nE AssertionError\n\ntest/test_core.py:99: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6513781547546387}, {"mutant": {"mutator_name": "FuncCall", "lineno": 51, "col_offset": 7, "end_lineno": 51, "end_col_offset": 72, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:51\n@@ -48,7 +48,7 @@\n \n def create_bucket_id_for_module(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract module name from pytest item.\"\"\"\n- if isinstance(node, (pytest.Session, pytest.Package, pytest.Module)):\n+ if None:\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_module(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:109: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41889405250549316}, {"mutant": {"mutator_name": "FuncCall", "lineno": 52, "col_offset": 15, "end_lineno": 52, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:52\n@@ -49,7 +49,7 @@\n def create_bucket_id_for_module(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract module name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_module(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_module(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:109: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40649843215942383}, {"mutant": {"mutator_name": "FuncCall", "lineno": 54, "col_offset": 7, "end_lineno": 54, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:54\n@@ -51,7 +51,7 @@\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module)):\n return create_bucket_id_from_node(node)\n \n- if isinstance(node, (pytest_nodes.Node)):\n+ if None:\n return create_bucket_id_for_module(node.parent)\n \n return \"\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_module(session) == \"session\"\n assert core.create_bucket_id_for_module(package) == \"tests/core/\"\n assert core.create_bucket_id_for_module(module) == \"tests/core/test_core.py\"\n> assert core.create_bucket_id_for_module(cls) == \"tests/core/test_core.py\"\nE AssertionError\n\ntest/test_core.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.635073184967041}, {"mutant": {"mutator_name": "FuncCall", "lineno": 55, "col_offset": 15, "end_lineno": 55, "end_col_offset": 55, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:55\n@@ -52,7 +52,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_module(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_module(session) == \"session\"\n assert core.create_bucket_id_for_module(package) == \"tests/core/\"\n assert core.create_bucket_id_for_module(module) == \"tests/core/test_core.py\"\n> assert core.create_bucket_id_for_module(cls) == \"tests/core/test_core.py\"\nE AssertionError\n\ntest/test_core.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6349449157714844}, {"mutant": {"mutator_name": "FuncCall", "lineno": 62, "col_offset": 7, "end_lineno": 62, "end_col_offset": 86, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:62\n@@ -59,7 +59,7 @@\n \n def create_bucket_id_for_class(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract class or module name from pytest item.\"\"\"\n- if isinstance(node, (pytest.Session, pytest.Package, pytest.Module, pytest.Class)):\n+ if None:\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_class(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:121: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4064216613769531}, {"mutant": {"mutator_name": "FuncCall", "lineno": 63, "col_offset": 15, "end_lineno": 63, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:63\n@@ -60,7 +60,7 @@\n def create_bucket_id_for_class(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract class or module name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module, pytest.Class)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_class(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_class(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:121: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6463181972503662}, {"mutant": {"mutator_name": "FuncCall", "lineno": 65, "col_offset": 7, "end_lineno": 65, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:65\n@@ -62,7 +62,7 @@\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module, pytest.Class)):\n return create_bucket_id_from_node(node)\n \n- if isinstance(node, (pytest_nodes.Node)):\n+ if None:\n return create_bucket_id_for_class(node.parent)\n \n return \"\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_class(session) == \"session\"\n assert core.create_bucket_id_for_class(package) == \"tests/core/\"\n assert core.create_bucket_id_for_class(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_class(cls) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id_for_class(func) == \"tests/core/test_core.py::TestCoreStuff\"\nE AssertionError\n\ntest/test_core.py:125: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6462323665618896}, {"mutant": {"mutator_name": "FuncCall", "lineno": 66, "col_offset": 15, "end_lineno": 66, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:66\n@@ -63,7 +63,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_class(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_class(session) == \"session\"\n assert core.create_bucket_id_for_class(package) == \"tests/core/\"\n assert core.create_bucket_id_for_class(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_class(cls) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id_for_class(func) == \"tests/core/test_core.py::TestCoreStuff\"\nE AssertionError\n\ntest/test_core.py:125: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4104313850402832}, {"mutant": {"mutator_name": "FuncCall", "lineno": 77, "col_offset": 27, "end_lineno": 77, "end_col_offset": 66, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:77\n@@ -74,7 +74,7 @@\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n- \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n+ \"parent\": lambda item: None,\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-156/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-156/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-156/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-156/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-156/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: startswith first arg must be str or a tuple of str, not NoneType\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.3713078498840332}, {"mutant": {"mutator_name": "FuncCall", "lineno": 78, "col_offset": 32, "end_lineno": 78, "end_col_offset": 78, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:78\n@@ -75,7 +75,7 @@\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n- \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n+ \"grandparent\": lambda item: None,\n }\n \n create_item_key = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\n assert core.create_bucket_id[\"module\"](func) == \"tests/core/test_core.py\"\n assert core.create_bucket_id[\"class\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n assert core.create_bucket_id[\"function\"](func) == \"tests/core/test_core.py::TestCoreStuff::test_init\"\n assert core.create_bucket_id[\"parent\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id[\"grandparent\"](func) == \"tests/core/test_core.py\"\nE AssertionError\n\ntest/test_core.py:141: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6608114242553711}, {"mutant": {"mutator_name": "FuncCall", "lineno": 84, "col_offset": 36, "end_lineno": 84, "end_col_offset": 70, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:84\n@@ -81,7 +81,7 @@\n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n- \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n+ \"md5\": lambda item, idx, count: None,\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n> assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\nE AssertionError\n\ntest/test_core.py:150: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.660785436630249}, {"mutant": {"mutator_name": "FuncCall", "lineno": 85, "col_offset": 39, "end_lineno": 85, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:85\n@@ -82,7 +82,7 @@\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n- \"random\": lambda item, idx, count: random.random(),\n+ \"random\": lambda item, idx, count: None,\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\n \n> assert 0 <= core.create_item_key[\"random\"](func, 5, 20) < 1\nE TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n\ntest/test_core.py:152: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4239199161529541}, {"mutant": {"mutator_name": "FuncCall", "lineno": 86, "col_offset": 40, "end_lineno": 86, "end_col_offset": 82, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:86\n@@ -83,7 +83,7 @@\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n- \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n+ \"fastest\": lambda item, idx, count: None,\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n core.create_sort_keys(func, 6, 60)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 1.1}\nE AssertionError\n\ntest/test_core.py:506: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6702322959899902}, {"mutant": {"mutator_name": "FuncCall", "lineno": 87, "col_offset": 40, "end_lineno": 87, "end_col_offset": 86, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:87\n@@ -84,7 +84,7 @@\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n- \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n+ \"diffcov\": lambda item, idx, count: None,\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_diffcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_diffcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"diffcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:164: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6655998229980469}, {"mutant": {"mutator_name": "FuncCall", "lineno": 88, "col_offset": 39, "end_lineno": 88, "end_col_offset": 84, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:88\n@@ -85,7 +85,7 @@\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n- \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n+ \"mutcov\": lambda item, idx, count: None,\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 2%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 2%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 3%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov FAILED [ 4%]\n\n=================================== FAILURES ===================================\n________________ TestCreateBucketId.test_create_item_key_mutcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_mutcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"mutcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:171: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 6 passed in 0.18s ==========================\n\n"}, "duration": 0.43758726119995117}, {"mutant": {"mutator_name": "FuncCall", "lineno": 94, "col_offset": 11, "end_lineno": 94, "end_col_offset": 107, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:94\n@@ -91,7 +91,7 @@\n \n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Get all totals from nodes matching this bucket and return sum.\"\"\"\n- return sum([total for nodeid, total in SortConfig.item_totals.items() if nodeid.startswith(bucket_id)])\n+ return None\n \n \n def get_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_fastest _______________\n\nself = \n\n def test_create_bucket_key_fastest(self):\n core.SortConfig.item_totals = {}\n> assert core.create_bucket_key[\"fastest\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:186: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5660088062286377}, {"mutant": {"mutator_name": "FuncCall", "lineno": 99, "col_offset": 11, "end_lineno": 99, "end_col_offset": 117, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return None\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4137847423553467}, {"mutant": {"mutator_name": "FuncCall", "lineno": 104, "col_offset": 11, "end_lineno": 104, "end_col_offset": 116, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return None\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-165/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-165/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-165/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5794744491577148}, {"mutant": {"mutator_name": "FuncCall", "lineno": 110, "col_offset": 41, "end_lineno": 110, "end_col_offset": 73, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:110\n@@ -107,7 +107,7 @@\n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n- \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n+ \"md5\": lambda bucket_id, idx, count: None,\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_min_bucket_key_md5 ___________________\n\nself = \nmd5 = \nget_marker_settings = \nmock_objects = (, , , )\n\n @mock.patch(\"pytest_sort.core.md5\")\n def test_min_bucket_key_md5(self, md5, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"md5\"\n (session, package, module, cls, func) = mock_objects\n \n md5.return_value.digest.side_effect = [b\"DEF\", b\"ABC\", b\"GHI\"]\n \n core.create_sort_keys(func, 0, 60)\n> core.create_sort_keys(func, 1, 60)\n\ntest/test_core.py:534: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 1, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nE TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n.poodle-temp/run-166/src/pytest_sort/core.py:212: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 - TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.18s ==========================\n\n"}, "duration": 0.4527463912963867}, {"mutant": {"mutator_name": "FuncCall", "lineno": 111, "col_offset": 44, "end_lineno": 111, "end_col_offset": 59, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:111\n@@ -108,7 +108,7 @@\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n- \"random\": lambda bucket_id, idx, count: random.random(),\n+ \"random\": lambda bucket_id, idx, count: None,\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateBucketId.test_create_bucket_key ___________________\n\nself = \n\n def test_create_bucket_key(self):\n assert core.create_bucket_key[\"ordered\"](\"tests\", 5, 20) == 6\n assert core.create_bucket_key[\"reverse\"](\"tests\", 5, 20) == 15\n \n md5_value = md5(b\"tests\").digest()\n assert core.create_bucket_key[\"md5\"](\"tests\", 5, 20) == md5_value\n \n> assert 0 <= core.create_bucket_key[\"random\"](\"tests\", 5, 20) < 1\nE TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n\ntest/test_core.py:182: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key - TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6857399940490723}, {"mutant": {"mutator_name": "FuncCall", "lineno": 112, "col_offset": 45, "end_lineno": 112, "end_col_offset": 72, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:112\n@@ -109,7 +109,7 @@\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n- \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n+ \"fastest\": lambda bucket_id, idx, count: None,\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n core.create_sort_keys(func, 6, 60)\n \n assert config.SortConfig.item_sort_keys == {func.nodeid: 1.1}\n assert config.SortConfig.item_bucket_id == {func.nodeid: cls.nodeid}\n> assert config.SortConfig.bucket_sort_keys == {cls.nodeid: 2.2}\nE AssertionError\n\ntest/test_core.py:508: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.24s ==========================\n\n"}, "duration": 0.6266083717346191}, {"mutant": {"mutator_name": "FuncCall", "lineno": 113, "col_offset": 45, "end_lineno": 113, "end_col_offset": 72, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:113\n@@ -110,7 +110,7 @@\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n- \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n+ \"diffcov\": lambda bucket_id, idx, count: None,\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.21s ==========================\n\n"}, "duration": 0.4834718704223633}, {"mutant": {"mutator_name": "FuncCall", "lineno": 114, "col_offset": 44, "end_lineno": 114, "end_col_offset": 75, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:114\n@@ -111,7 +111,7 @@\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n- \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n+ \"mutcov\": lambda bucket_id, idx, count: None,\n }\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-170/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-170/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-170/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5919194221496582}, {"mutant": {"mutator_name": "FuncCall", "lineno": 128, "col_offset": 15, "end_lineno": 128, "end_col_offset": 74, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:128\n@@ -125,7 +125,7 @@\n return item_sort_key\n \n try:\n- return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n+ return None\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'order'. Target:{node_id}\"\n raise TypeError(msg) from e\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______ TestValidateMarker.test_validate_order_marker[args0-kwargs0-1234] _______\n\nself = \nargs = [1234], kwargs = {}, key = 1234\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([1234], {}, 1234),\n ([], {\"item_sort_key\": 5678}, 5678),\n ],\n )\n def test_validate_order_marker(self, args, kwargs, key):\n order_marker = mock.MagicMock()\n order_marker.args = args\n order_marker.kwargs = kwargs\n \n> assert core.validate_order_marker(order_marker, \"testnodeid\") == key\nE AssertionError\n\ntest/test_core.py:228: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.5934133529663086}, {"mutant": {"mutator_name": "FuncCall", "lineno": 131, "col_offset": 14, "end_lineno": 131, "end_col_offset": 28, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:131\n@@ -128,7 +128,7 @@\n return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'order'. Target:{node_id}\"\n- raise TypeError(msg) from e\n+ raise None from e\n \n \n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestValidateMarker.test_validate_order_marker_error ______________\n\norder_marker = , node_id = 'testnodeid'\n\n def validate_order_marker(order_marker: pytest.Mark, node_id: str) -> Any: # noqa: ANN401\n \"\"\"Validate values from order marker.\n \n Returns sort_key\n \"\"\"\n \n def mark_order_parse(item_sort_key: Any) -> Any: # noqa: ANN401\n return item_sort_key\n \n try:\n> return mark_order_parse(*order_marker.args, **order_marker.kwargs)\nE TypeError: validate_order_marker..mark_order_parse() missing 1 required positional argument: 'item_sort_key'\n\n.poodle-temp/run-172/src/pytest_sort/core.py:128: TypeError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_validate_order_marker_error(self):\n order_marker = mock.MagicMock()\n order_marker.args = []\n order_marker.kwargs = {}\n \n with pytest.raises(TypeError, match=\"^Incorrect arguments on marker 'order'. Target:testnodeid$\") as type_error:\n> core.validate_order_marker(order_marker, \"testnodeid\")\n\ntest/test_core.py:236: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\norder_marker = , node_id = 'testnodeid'\n\n def validate_order_marker(order_marker: pytest.Mark, node_id: str) -> Any: # noqa: ANN401\n \"\"\"Validate values from order marker.\n \n Returns sort_key\n \"\"\"\n \n def mark_order_parse(item_sort_key: Any) -> Any: # noqa: ANN401\n return item_sort_key\n \n try:\n return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'order'. Target:{node_id}\"\n> raise None from e\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-172/src/pytest_sort/core.py:131: TypeError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_validate_order_marker_error(self):\n order_marker = mock.MagicMock()\n order_marker.args = []\n order_marker.kwargs = {}\n \n> with pytest.raises(TypeError, match=\"^Incorrect arguments on marker 'order'. Target:testnodeid$\") as type_error:\nE AssertionError: Regex pattern did not match.\nE Regex: \"^Incorrect arguments on marker 'order'. Target:testnodeid$\"\nE Input: 'exceptions must derive from BaseException'\n\ntest/test_core.py:235: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_order_marker_error - AssertionError: Regex pattern did not match.\n Regex: \"^Incorrect arguments on marker 'order'. Target:testnodeid$\"\n Input: 'exceptions must derive from BaseException'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.48865556716918945}, {"mutant": {"mutator_name": "FuncCall", "lineno": 144, "col_offset": 30, "end_lineno": 144, "end_col_offset": 86, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:144\n@@ -141,7 +141,7 @@\n return (mode, bucket)\n \n try:\n- (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n+ (mode, bucket_temp) = None\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n raise TypeError(msg) from e\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______ TestValidateMarker.test_validate_sort_marker[args0-kwargs0-key0] _______\n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n> (mode, bucket_temp) = None\nE TypeError: cannot unpack non-iterable NoneType object\n\n.poodle-temp/run-173/src/pytest_sort/core.py:144: TypeError\n\nThe above exception was the direct cause of the following exception:\n\nself = \nargs = ['ordered', 'parent'], kwargs = {}, key = ('ordered', 'parent')\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([\"ordered\", \"parent\"], {}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {\"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([], {\"mode\": \"ordered\", \"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {}, (\"ordered\", \"self\")),\n ],\n )\n def test_validate_sort_marker(self, args, kwargs, key):\n sort_marker = mock.MagicMock()\n sort_marker.args = args\n sort_marker.kwargs = kwargs\n \n> assert core.validate_sort_marker(sort_marker, \"testnodeid\") == key\n\ntest/test_core.py:254: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n (mode, bucket_temp) = None\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n> raise TypeError(msg) from e\nE TypeError: Incorrect arguments on marker 'sort'. Target:testnodeid\n\n.poodle-temp/run-173/src/pytest_sort/core.py:147: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] - TypeError: Incorrect arguments on marker 'sort'. Target:testnodeid\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.462033748626709}, {"mutant": {"mutator_name": "FuncCall", "lineno": 147, "col_offset": 14, "end_lineno": 147, "end_col_offset": 28, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:147\n@@ -144,7 +144,7 @@\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n- raise TypeError(msg) from e\n+ raise None from e\n \n if mode not in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestValidateMarker.test_validate_sort_marker_type_error ____________\n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n> (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\nE TypeError: validate_sort_marker..mark_sort_parse() missing 1 required positional argument: 'mode'\n\n.poodle-temp/run-174/src/pytest_sort/core.py:144: TypeError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_validate_sort_marker_type_error(self):\n sort_marker = mock.MagicMock()\n sort_marker.args = []\n sort_marker.kwargs = {}\n \n with pytest.raises(TypeError, match=\"^Incorrect arguments on marker 'sort'. Target:testnodeid$\") as type_error:\n> core.validate_sort_marker(sort_marker, \"testnodeid\")\n\ntest/test_core.py:262: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n> raise None from e\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-174/src/pytest_sort/core.py:147: TypeError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_validate_sort_marker_type_error(self):\n sort_marker = mock.MagicMock()\n sort_marker.args = []\n sort_marker.kwargs = {}\n \n> with pytest.raises(TypeError, match=\"^Incorrect arguments on marker 'sort'. Target:testnodeid$\") as type_error:\nE AssertionError: Regex pattern did not match.\nE Regex: \"^Incorrect arguments on marker 'sort'. Target:testnodeid$\"\nE Input: 'exceptions must derive from BaseException'\n\ntest/test_core.py:261: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error - AssertionError: Regex pattern did not match.\n Regex: \"^Incorrect arguments on marker 'sort'. Target:testnodeid$\"\n Input: 'exceptions must derive from BaseException'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.29s ===============================\n\n"}, "duration": 0.6755757331848145}, {"mutant": {"mutator_name": "FuncCall", "lineno": 151, "col_offset": 14, "end_lineno": 151, "end_col_offset": 29, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:151\n@@ -148,7 +148,7 @@\n \n if mode not in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n- raise ValueError(msg)\n+ raise None\n \n return (mode, bucket_temp)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________ TestValidateMarker.test_validate_sort_marker_value_error ___________\n\nself = \n\n def test_validate_sort_marker_value_error(self):\n sort_marker = mock.MagicMock()\n sort_marker.args = [\"invalid\"]\n sort_marker.kwargs = {}\n \n with pytest.raises(\n ValueError, match=\"^Invalid Value for 'mode' on 'sort' marker. Value:invalid Target:testnodeid$\"\n ) as type_error:\n> core.validate_sort_marker(sort_marker, \"testnodeid\")\n\ntest/test_core.py:274: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return (mode, bucket)\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n raise TypeError(msg) from e\n \n if mode not in create_item_key:\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-175/src/pytest_sort/core.py:151: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6605281829833984}, {"mutant": {"mutator_name": "FuncCall", "lineno": 172, "col_offset": 68, "end_lineno": 172, "end_col_offset": 100, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:172\n@@ -169,7 +169,7 @@\n node_id = node.nodeid\n \n if node.parent:\n- (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n+ (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = None\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-176/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-176/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-176/src/pytest_sort/core.py\", line 203, in create_sort_keys\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-176/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: cannot unpack non-iterable NoneType object\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.3733968734741211}, {"mutant": {"mutator_name": "FuncCall", "lineno": 174, "col_offset": 17, "end_lineno": 174, "end_col_offset": 43, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:174\n@@ -171,7 +171,7 @@\n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n- for order in node.iter_markers(\"order\"):\n+ for order in None:\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 203, in create_sort_keys\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> [Previous line repeated 1 more time]\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-177/src/pytest_sort/core.py\", line 174, in get_marker_settings\nINTERNALERROR> for order in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5823154449462891}, {"mutant": {"mutator_name": "FuncCall", "lineno": 175, "col_offset": 19, "end_lineno": 175, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:175\n@@ -172,7 +172,7 @@\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n- sort_key = validate_order_marker(order, node_id)\n+ sort_key = None\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (None, None, None, None, 1)\nE AssertionError\n\ntest/test_core.py:289: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6266953945159912}, {"mutant": {"mutator_name": "FuncCall", "lineno": 176, "col_offset": 11, "end_lineno": 176, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:176\n@@ -173,7 +173,7 @@\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n- if isinstance(node, pytest.Function):\n+ if None:\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestMarkerSettings.test_get_marker_settings_order_function __________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_function(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (None, None, None, None, 1)\nE AssertionError\n\ntest/test_core.py:289: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.4118194580078125}, {"mutant": {"mutator_name": "FuncCall", "lineno": 180, "col_offset": 24, "end_lineno": 180, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:180\n@@ -177,7 +177,7 @@\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n- bucket_id = create_bucket_id_from_node(node)\n+ bucket_id = None\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_order_cls _____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_order_cls(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n cls.iter_markers.side_effect = [[order_10], []]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (None, None, cls.nodeid, 10, 1)\nE AssertionError\n\ntest/test_core.py:312: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5965580940246582}, {"mutant": {"mutator_name": "FuncCall", "lineno": 182, "col_offset": 16, "end_lineno": 182, "end_col_offset": 41, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:182\n@@ -179,7 +179,7 @@\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n- for sort in node.iter_markers(\"sort\"):\n+ for sort in None:\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 203, in create_sort_keys\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> [Previous line repeated 1 more time]\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-181/src/pytest_sort/core.py\", line 182, in get_marker_settings\nINTERNALERROR> for sort in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.17s =============================\n\n"}, "duration": 0.5731017589569092}, {"mutant": {"mutator_name": "FuncCall", "lineno": 183, "col_offset": 30, "end_lineno": 183, "end_col_offset": 65, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:183\n@@ -180,7 +180,7 @@\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n- (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n+ (mode, bucket_temp) = None\n \n if bucket_temp == \"self\":\n bucket_id = create_bucket_id_from_node(node)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_sort_self _____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_self(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_ordered = mock.MagicMock()\n sort_ordered.args = [\"ordered\"]\n sort_ordered.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_ordered]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"ordered\", None, cls.nodeid, 10, 1)\n\ntest/test_core.py:363: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-182/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n> (mode, bucket_temp) = None\nE TypeError: cannot unpack non-iterable NoneType object\n\n.poodle-temp/run-182/src/pytest_sort/core.py:183: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self - TypeError: cannot unpack non-iterable NoneType object\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.4506843090057373}, {"mutant": {"mutator_name": "FuncCall", "lineno": 186, "col_offset": 24, "end_lineno": 186, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:186\n@@ -183,7 +183,7 @@\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n- bucket_id = create_bucket_id_from_node(node)\n+ bucket_id = None\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestMarkerSettings.test_get_marker_settings_sort_self _____________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_sort_self(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n order_1 = mock.MagicMock()\n order_1.args = [1]\n order_1.kwargs = {}\n \n order_10 = mock.MagicMock()\n order_10.args = [10]\n order_10.kwargs = {}\n \n sort_ordered = mock.MagicMock()\n sort_ordered.args = [\"ordered\"]\n sort_ordered.kwargs = {}\n \n module.iter_markers.side_effect = [[order_10], []]\n cls.iter_markers.side_effect = [[], [sort_ordered]]\n func.iter_markers.side_effect = [[order_1], []]\n \n> assert core.get_marker_settings(func) == (\"ordered\", None, cls.nodeid, 10, 1)\nE AssertionError\n\ntest/test_core.py:363: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41942358016967773}, {"mutant": {"mutator_name": "FuncCall", "lineno": 193, "col_offset": 18, "end_lineno": 193, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:193\n@@ -190,7 +190,7 @@\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n- raise ValueError(msg)\n+ raise None\n \n return (mode, bucket, bucket_id, bucket_sort_key, item_sort_key)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestMarkerSettings.test_get_marker_settings_error _______________\n\nself = \nmock_objects = (, , , )\n\n def test_get_marker_settings_error(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n sort_random = mock.MagicMock()\n sort_random.args = [\"random\", \"hello\"]\n sort_random.kwargs = {}\n \n module.iter_markers.side_effect = [[], [sort_random]]\n \n with pytest.raises(\n ValueError, match=f\"^Invalid Value for 'bucket' on 'sort' marker: hello. Target: {module.nodeid}$\"\n ):\n> core.get_marker_settings(func)\n\ntest/test_core.py:410: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-184/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n.poodle-temp/run-184/src/pytest_sort/core.py:172: in get_marker_settings\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nnode = \n\n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n \"\"\"Retrieve and validate options on 'sort' and 'order' markers.\n \n Recursively calls with node.parent to get values from any level.\n \n Returns: (mode, bucket, bucket_id, bucket_sort_key, sort_key)\n \"\"\"\n mode = None\n bucket = None\n bucket_id = None\n bucket_sort_key = None\n item_sort_key = None\n \n node_id = node.nodeid\n \n if node.parent:\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\n \n for order in node.iter_markers(\"order\"):\n sort_key = validate_order_marker(order, node_id)\n if isinstance(node, pytest.Function):\n item_sort_key = sort_key\n else:\n bucket_sort_key = sort_key\n bucket_id = create_bucket_id_from_node(node)\n \n for sort in node.iter_markers(\"sort\"):\n (mode, bucket_temp) = validate_sort_marker(sort, node_id)\n \n if bucket_temp == \"self\":\n bucket_id = create_bucket_id_from_node(node)\n elif bucket_temp in create_bucket_id:\n bucket = bucket_temp\n bucket_id = None\n bucket_sort_key = None\n else:\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-184/src/pytest_sort/core.py:193: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestMarkerSettings::test_get_marker_settings_error - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.6687860488891602}, {"mutant": {"mutator_name": "FuncCall", "lineno": 203, "col_offset": 64, "end_lineno": 203, "end_col_offset": 89, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:203\n@@ -200,7 +200,7 @@\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n- (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n+ (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = None\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-185/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-185/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-185/src/pytest_sort/core.py\", line 203, in create_sort_keys\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: cannot unpack non-iterable NoneType object\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5795917510986328}, {"mutant": {"mutator_name": "FuncCall", "lineno": 205, "col_offset": 62, "end_lineno": 205, "end_col_offset": 120, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:205\n@@ -202,7 +202,7 @@\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n- SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n+ SortConfig.item_sort_keys[item.nodeid] = item_sort_key or None\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 0%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:447: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.17s ==========================\n\n"}, "duration": 0.4237849712371826}, {"mutant": {"mutator_name": "FuncCall", "lineno": 207, "col_offset": 29, "end_lineno": 207, "end_col_offset": 80, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:207\n@@ -204,7 +204,7 @@\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n- bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n+ bucket_id = bucket_id or None\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-187/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-187/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-187/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-187/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-187/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: startswith first arg must be str or a tuple of str, not NoneType\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5790936946868896}, {"mutant": {"mutator_name": "FuncCall", "lineno": 210, "col_offset": 36, "end_lineno": 210, "end_col_offset": 100, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:210\n@@ -207,7 +207,7 @@\n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n- bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n+ bucket_key = bucket_sort_key or None\n if bucket_id in SortConfig.bucket_sort_keys:\n SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-188/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-188/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-188/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5774130821228027}, {"mutant": {"mutator_name": "FuncCall", "lineno": 212, "col_offset": 49, "end_lineno": 212, "end_col_offset": 104, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:212\n@@ -209,7 +209,7 @@\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n- SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n+ SortConfig.bucket_sort_keys[bucket_id] = None\n else:\n SortConfig.bucket_sort_keys[bucket_id] = bucket_key\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-189/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-189/src/pytest_sort/core.py\", line 241, in sort_items\nINTERNALERROR> items.sort(key=get_item_sort_key)\nINTERNALERROR> TypeError: '<' not supported between instances of 'int' and 'NoneType'\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.36250734329223633}, {"mutant": {"mutator_name": "FuncCall", "lineno": 227, "col_offset": 8, "end_lineno": 227, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:227\n@@ -224,7 +224,7 @@\n def sort_items(items: list[pytest.Item]) -> None:\n \"\"\"Reorder the items.\"\"\"\n if SortConfig.mode == \"random\" or SortConfig.bucket_mode == \"random\":\n- random.seed(SortConfig.seed)\n+ None\n \n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n SortConfig.diff_cov_scores = get_diff_test_scores()\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestSortItems.test_sort_items_random[random-ordered] _____________\n\nself = , mode = 'random'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"random\", \"ordered\"),\n (\"ordered\", \"random\"),\n (\"random\", \"random\"),\n ],\n )\n def test_sort_items_random(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n> random.seed.assert_called_with(12345)\n\ntest/test_core.py:648: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (12345,)\nkwargs = {}, expected = 'seed(12345)', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: seed(12345)\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: seed(12345)\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_random[random-ordered] - AssertionError: expected call not found.\nExpected: seed(12345)\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.45250463485717773}, {"mutant": {"mutator_name": "FuncCall", "lineno": 230, "col_offset": 37, "end_lineno": 230, "end_col_offset": 59, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:230\n@@ -227,7 +227,7 @@\n random.seed(SortConfig.seed)\n \n if SortConfig.mode == \"diffcov\" or SortConfig.bucket_mode == \"diffcov\":\n- SortConfig.diff_cov_scores = get_diff_test_scores()\n+ SortConfig.diff_cov_scores = None\n \n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n SortConfig.mut_cov_scores = get_mut_test_scores()\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_diffcov[diffcov-ordered] ____________\n\nself = , mode = 'diffcov'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"diffcov\", \"ordered\"),\n (\"ordered\", \"diffcov\"),\n (\"diffcov\", \"diffcov\"),\n ],\n )\n def test_sort_items_diffcov(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = None\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n> get_diff_test_scores.assert_called()\n\ntest/test_core.py:682: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'get_diff_test_scores' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] - AssertionError: Expected 'get_diff_test_scores' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7134404182434082}, {"mutant": {"mutator_name": "FuncCall", "lineno": 233, "col_offset": 36, "end_lineno": 233, "end_col_offset": 57, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:233\n@@ -230,7 +230,7 @@\n SortConfig.diff_cov_scores = get_diff_test_scores()\n \n if SortConfig.mode == \"mutcov\" or SortConfig.bucket_mode == \"mutcov\":\n- SortConfig.mut_cov_scores = get_mut_test_scores()\n+ SortConfig.mut_cov_scores = None\n \n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n SortConfig.item_totals = get_all_totals()\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-192/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-192/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-192/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-192/src/pytest_sort/core.py\", line 88, in \nINTERNALERROR> \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'get'\n\n============================ no tests ran in 0.13s =============================\n\n"}, "duration": 0.5147888660430908}, {"mutant": {"mutator_name": "FuncCall", "lineno": 236, "col_offset": 33, "end_lineno": 236, "end_col_offset": 49, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:236\n@@ -233,7 +233,7 @@\n SortConfig.mut_cov_scores = get_mut_test_scores()\n \n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n- SortConfig.item_totals = get_all_totals()\n+ SortConfig.item_totals = None\n \n for idx, item in enumerate(items):\n create_sort_keys(item, idx, len(items))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestSortItems.test_sort_items_fastest[fastest-ordered] ____________\n\nself = , mode = 'fastest'\nbucket_mode = 'ordered', random = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n @pytest.mark.parametrize(\n (\"mode\", \"bucket_mode\"),\n [\n (\"fastest\", \"ordered\"),\n (\"ordered\", \"fastest\"),\n (\"fastest\", \"fastest\"),\n ],\n )\n def test_sort_items_fastest(\n self,\n mode,\n bucket_mode,\n random,\n get_diff_test_scores,\n get_all_totals,\n create_sort_keys,\n get_item_sort_key,\n print_test_case_order,\n ):\n core.SortConfig.mode = mode\n core.SortConfig.bucket_mode = bucket_mode\n core.SortConfig.seed = 12345\n core.SortConfig.debug = False\n \n core.sort_items(self.items.copy())\n \n random.seed.assert_not_called()\n get_diff_test_scores.assert_not_called()\n> get_all_totals.assert_called_with()\n\ntest/test_core.py:749: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = ()\nkwargs = {}, expected = 'get_all_totals()', actual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: get_all_totals()\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: get_all_totals()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] - AssertionError: expected call not found.\nExpected: get_all_totals()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.45377182960510254}, {"mutant": {"mutator_name": "FuncCall", "lineno": 238, "col_offset": 21, "end_lineno": 238, "end_col_offset": 37, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:238\n@@ -235,7 +235,7 @@\n if SortConfig.mode == \"fastest\" or SortConfig.bucket_mode == \"fastest\":\n SortConfig.item_totals = get_all_totals()\n \n- for idx, item in enumerate(items):\n+ for idx, item in None:\n create_sort_keys(item, idx, len(items))\n \n items.sort(key=get_item_sort_key)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-194/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-194/src/pytest_sort/core.py\", line 238, in sort_items\nINTERNALERROR> for idx, item in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.563652515411377}, {"mutant": {"mutator_name": "FuncCall", "lineno": 239, "col_offset": 8, "end_lineno": 239, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:239\n@@ -236,7 +236,7 @@\n SortConfig.item_totals = get_all_totals()\n \n for idx, item in enumerate(items):\n- create_sort_keys(item, idx, len(items))\n+ None\n \n items.sort(key=get_item_sort_key)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-195/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-195/src/pytest_sort/core.py\", line 241, in sort_items\nINTERNALERROR> items.sort(key=get_item_sort_key)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-195/src/pytest_sort/core.py\", line 220, in get_item_sort_key\nINTERNALERROR> bucket_id = SortConfig.item_bucket_id[node_id]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^\nINTERNALERROR> KeyError: 'test/test_config.py::TestSortConfig::test_defaults'\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5654032230377197}, {"mutant": {"mutator_name": "FuncCall", "lineno": 241, "col_offset": 4, "end_lineno": 241, "end_col_offset": 37, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:241\n@@ -238,7 +238,7 @@\n for idx, item in enumerate(items):\n create_sort_keys(item, idx, len(items))\n \n- items.sort(key=get_item_sort_key)\n+ None\n \n if SortConfig.debug:\n print_test_case_order(items)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items FAILED [ 64%]\n\n=================================== FAILURES ===================================\n________________________ TestSortItems.test_sort_items _________________________\n\nself = \nrandom = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n def test_sort_items(\n self, random, get_diff_test_scores, get_all_totals, create_sort_keys, get_item_sort_key, print_test_case_order\n ):\n core.SortConfig.mode = \"ordered\"\n core.SortConfig.bucket_mode = \"ordered\"\n core.SortConfig.debug = False\n \n items = self.items.copy()\n core.sort_items(items)\n> assert items[0].nodeid == \"function_1\"\nE AssertionError\n\ntest/test_core.py:603: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 110 passed in 0.69s =========================\n\n"}, "duration": 0.9484014511108398}, {"mutant": {"mutator_name": "FuncCall", "lineno": 244, "col_offset": 8, "end_lineno": 244, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:244\n@@ -241,7 +241,7 @@\n items.sort(key=get_item_sort_key)\n \n if SortConfig.debug:\n- print_test_case_order(items)\n+ None\n \n \n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestSortItems::test_sort_items_debug FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestSortItems.test_sort_items_debug ______________________\n\nself = \nrandom = \nget_diff_test_scores = \nget_all_totals = \ncreate_sort_keys = \nget_item_sort_key = \nprint_test_case_order = \n\n def test_sort_items_debug(\n self, random, get_diff_test_scores, get_all_totals, create_sort_keys, get_item_sort_key, print_test_case_order\n ):\n core.SortConfig.mode = \"ordered\"\n core.SortConfig.bucket_mode = \"ordered\"\n core.SortConfig.debug = True\n \n items = self.items.copy()\n core.sort_items(items)\n \n random.seed.assert_not_called()\n get_diff_test_scores.assert_not_called()\n get_all_totals.assert_not_called()\n assert create_sort_keys.call_count == 4\n assert get_item_sort_key.call_count == 4\n> print_test_case_order.assert_called_with(items)\n\ntest/test_core.py:769: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ([, , , ],)\nkwargs = {}\nexpected = \"print_test_case_order([, , , ])\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: print_test_case_order([, , , ])\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: print_test_case_order([, , , ])\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestSortItems::test_sort_items_debug - AssertionError: expected call not found.\nExpected: print_test_case_order([, , , ])\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.70149827003479}, {"mutant": {"mutator_name": "FuncCall", "lineno": 249, "col_offset": 14, "end_lineno": 249, "end_col_offset": 71, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:249\n@@ -246,7 +246,7 @@\n \n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n- nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n+ nodeids = None\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = None\n> nodeids.sort()\nE AttributeError: 'NoneType' object has no attribute 'sort'\n\n.poodle-temp/run-198/src/pytest_sort/core.py:250: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AttributeError: 'NoneType' object has no attribute 'sort'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6406912803649902}, {"mutant": {"mutator_name": "FuncCall", "lineno": 250, "col_offset": 4, "end_lineno": 250, "end_col_offset": 18, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:250\n@@ -247,7 +247,7 @@\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n- nodeids.sort()\n+ None\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_4 1 2 3 6'),\nE call('function_1 100 200 300 600')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_4 1 2 3 6'),\n call('function_1 100 200 300 600')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7171328067779541}, {"mutant": {"mutator_name": "FuncCall", "lineno": 252, "col_offset": 20, "end_lineno": 252, "end_col_offset": 60, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:252\n@@ -249,7 +249,7 @@\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n- node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n+ node_id_width = None + 3\n stat_width = 16\n \n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n> node_id_width = None + 3\nE TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'\n\n.poodle-temp/run-200/src/pytest_sort/core.py:252: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4085550308227539}, {"mutant": {"mutator_name": "FuncCall", "lineno": 255, "col_offset": 4, "end_lineno": 258, "end_col_offset": 5, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:255\n@@ -252,10 +252,7 @@\n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n- print(\n- f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n- f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n- )\n+ None\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.7138798236846924}, {"mutant": {"mutator_name": "FuncCall", "lineno": 259, "col_offset": 4, "end_lineno": 262, "end_col_offset": 5, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:259\n@@ -256,10 +256,7 @@\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n- print(\n- f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n- f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n- )\n+ None\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.45064806938171387}, {"mutant": {"mutator_name": "FuncCall", "lineno": 264, "col_offset": 16, "end_lineno": 264, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:264\n@@ -261,7 +261,7 @@\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n- stats = get_stats(nodeid)\n+ stats = None\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = None\n> setup_ns = f\"{stats['setup']:,}\"\nE TypeError: 'NoneType' object is not subscriptable\n\n.poodle-temp/run-203/src/pytest_sort/core.py:265: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: 'NoneType' object is not subscriptable\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.6614673137664795}, {"mutant": {"mutator_name": "FuncCall", "lineno": 269, "col_offset": 8, "end_lineno": 272, "end_col_offset": 9, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:269\n@@ -266,10 +266,7 @@\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n- print(\n- f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n- f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n- )\n+ None\n \n \n def print_test_case_order(items: list[pytest.Item]) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n core.print_recorded_times_report(terminal_reporter)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\n \"\\n*** pytest-sort maximum recorded times \"\n \"Nanoseconds ***\"\n ),\n mock.call(\"Test Case setup call teardown total\"),\n mock.call(\"function_1 100 200 300 600\"),\n mock.call(\"function_2 100,000 200,000 300,000 600,000\"),\n mock.call(\"function_3 1,000,000 2,000,000 3,000,000 6,000,000\"),\n mock.call(\"function_4 1 2 3 6\"),\n ]\n )\n\ntest/test_core.py:806: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'), cal...,000,000 6,000,000'), call('function_4 1 2 3 6')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total'),\nE call('function_1 100 200 300 600'),\nE call('function_2 100,000 200,000 300,000 600,000'),\nE call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\nE call('function_4 1 2 3 6')]\nE Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\nE call('Test Case setup call teardown total')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - AssertionError: Calls not found.\nExpected: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total'),\n call('function_1 100 200 300 600'),\n call('function_2 100,000 200,000 300,000 600,000'),\n call('function_3 1,000,000 2,000,000 3,000,000 6,000,000'),\n call('function_4 1 2 3 6')]\n Actual: [call('\\n*** pytest-sort maximum recorded times Nanoseconds ***'),\n call('Test Case setup call teardown total')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.7220189571380615}, {"mutant": {"mutator_name": "FuncCall", "lineno": 277, "col_offset": 4, "end_lineno": 277, "end_col_offset": 31, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:277\n@@ -274,7 +274,7 @@\n \n def print_test_case_order(items: list[pytest.Item]) -> None:\n \"\"\"Print test items sort data: bucket_key, bucket_id, item_key, item_id.\"\"\"\n- print(\"\\nTest Case Order:\")\n+ None\n print(\"(bucket_key, bucket_id, item_key, item_id)\")\n for item in items:\n node_id = item.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.45163679122924805}, {"mutant": {"mutator_name": "FuncCall", "lineno": 278, "col_offset": 4, "end_lineno": 278, "end_col_offset": 55, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:278\n@@ -275,7 +275,7 @@\n def print_test_case_order(items: list[pytest.Item]) -> None:\n \"\"\"Print test items sort data: bucket_key, bucket_id, item_key, item_id.\"\"\"\n print(\"\\nTest Case Order:\")\n- print(\"(bucket_key, bucket_id, item_key, item_id)\")\n+ None\n for item in items:\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('\\nTest Case Order:'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('\\nTest Case Order:'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4495253562927246}, {"mutant": {"mutator_name": "FuncCall", "lineno": 282, "col_offset": 8, "end_lineno": 282, "end_col_offset": 111, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:282\n@@ -279,4 +279,4 @@\n for item in items:\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, SortConfig.item_sort_keys[node_id], node_id))\n+ None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.7120256423950195}, {"mutant": {"mutator_name": "DictArray", "lineno": 205, "col_offset": 4, "end_lineno": 205, "end_col_offset": 42, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:205\n@@ -202,7 +202,7 @@\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n- SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n+ None = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-208/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-208/src/pytest_sort/core.py\", line 205\n None = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.29480504989624023}, {"mutant": {"mutator_name": "DictArray", "lineno": 205, "col_offset": 62, "end_lineno": 205, "end_col_offset": 102, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:205\n@@ -202,7 +202,7 @@\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n- SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n+ SortConfig.item_sort_keys[item.nodeid] = item_sort_key or None(item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-209/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-209/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-209/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or None(item, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: 'NoneType' object is not callable\n\n============================ no tests ran in 0.11s =============================\n\n/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-209/src/pytest_sort/core.py:205: SyntaxWarning: 'NoneType' object is not callable; perhaps you missed a comma?\n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or None(item, idx, count)\n"}, "duration": 0.36315202713012695}, {"mutant": {"mutator_name": "DictArray", "lineno": 207, "col_offset": 29, "end_lineno": 207, "end_col_offset": 74, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:207\n@@ -204,7 +204,7 @@\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n- bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n+ bucket_id = bucket_id or None(item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-210/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-210/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-210/src/pytest_sort/core.py\", line 207, in create_sort_keys\nINTERNALERROR> bucket_id = bucket_id or None(item)\nINTERNALERROR> ^^^^^^^^^^\nINTERNALERROR> TypeError: 'NoneType' object is not callable\n\n============================ no tests ran in 0.19s =============================\n\n/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-210/src/pytest_sort/core.py:207: SyntaxWarning: 'NoneType' object is not callable; perhaps you missed a comma?\n bucket_id = bucket_id or None(item)\n"}, "duration": 0.5617036819458008}, {"mutant": {"mutator_name": "DictArray", "lineno": 208, "col_offset": 4, "end_lineno": 208, "end_col_offset": 42, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:208\n@@ -205,7 +205,7 @@\n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n- SortConfig.item_bucket_id[item.nodeid] = bucket_id\n+ None = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-211/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-211/src/pytest_sort/core.py\", line 208\n None = bucket_id\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.29662251472473145}, {"mutant": {"mutator_name": "DictArray", "lineno": 210, "col_offset": 36, "end_lineno": 210, "end_col_offset": 77, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:210\n@@ -207,7 +207,7 @@\n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n- bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n+ bucket_key = bucket_sort_key or None(bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-212/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-212/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-212/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or None(bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: 'NoneType' object is not callable\n\n============================ no tests ran in 0.12s =============================\n\n/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-212/src/pytest_sort/core.py:210: SyntaxWarning: 'NoneType' object is not callable; perhaps you missed a comma?\n bucket_key = bucket_sort_key or None(bucket_id, idx, count)\n"}, "duration": 0.3664069175720215}, {"mutant": {"mutator_name": "DictArray", "lineno": 212, "col_offset": 8, "end_lineno": 212, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:212\n@@ -209,7 +209,7 @@\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n- SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n+ None = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n SortConfig.bucket_sort_keys[bucket_id] = bucket_key\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-213/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-213/src/pytest_sort/core.py\", line 212\n None = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2963557243347168}, {"mutant": {"mutator_name": "DictArray", "lineno": 212, "col_offset": 53, "end_lineno": 212, "end_col_offset": 91, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:212\n@@ -209,7 +209,7 @@\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n- SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n+ SortConfig.bucket_sort_keys[bucket_id] = min(None, bucket_key)\n else:\n SortConfig.bucket_sort_keys[bucket_id] = bucket_key\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-214/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-214/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-214/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(None, bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'int' and 'NoneType'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5885415077209473}, {"mutant": {"mutator_name": "DictArray", "lineno": 214, "col_offset": 8, "end_lineno": 214, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:214\n@@ -211,7 +211,7 @@\n if bucket_id in SortConfig.bucket_sort_keys:\n SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\n else:\n- SortConfig.bucket_sort_keys[bucket_id] = bucket_key\n+ None = bucket_key\n \n \n def get_item_sort_key(item: pytest.Item) -> tuple:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-215/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-215/src/pytest_sort/core.py\", line 214\n None = bucket_key\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.22763967514038086}, {"mutant": {"mutator_name": "DictArray", "lineno": 220, "col_offset": 16, "end_lineno": 220, "end_col_offset": 50, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:220\n@@ -217,7 +217,7 @@\n def get_item_sort_key(item: pytest.Item) -> tuple:\n \"\"\"Build Combined Sort Key for this Item using the Bucket Keys and Item Keys stored in SortConfig.\"\"\"\n node_id = item.nodeid\n- bucket_id = SortConfig.item_bucket_id[node_id]\n+ bucket_id = None\n return (SortConfig.bucket_sort_keys[bucket_id], SortConfig.item_sort_keys[node_id])\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-216/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-216/src/pytest_sort/core.py\", line 241, in sort_items\nINTERNALERROR> items.sort(key=get_item_sort_key)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-216/src/pytest_sort/core.py\", line 221, in get_item_sort_key\nINTERNALERROR> return (SortConfig.bucket_sort_keys[bucket_id], SortConfig.item_sort_keys[node_id])\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^\nINTERNALERROR> KeyError: None\n\n============================ no tests ran in 0.12s =============================\n\n"}, "duration": 0.38158631324768066}, {"mutant": {"mutator_name": "DictArray", "lineno": 221, "col_offset": 12, "end_lineno": 221, "end_col_offset": 50, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:221\n@@ -218,7 +218,7 @@\n \"\"\"Build Combined Sort Key for this Item using the Bucket Keys and Item Keys stored in SortConfig.\"\"\"\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- return (SortConfig.bucket_sort_keys[bucket_id], SortConfig.item_sort_keys[node_id])\n+ return (None, SortConfig.item_sort_keys[node_id])\n \n \n def sort_items(items: list[pytest.Item]) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateSortKey.test_get_item_sort_key ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_get_item_sort_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n core.SortConfig.item_sort_keys = {func.nodeid: 1.1}\n core.SortConfig.item_bucket_id = {func.nodeid: cls.nodeid}\n core.SortConfig.bucket_sort_keys = {cls.nodeid: 2.2}\n \n> assert core.get_item_sort_key(func) == (2.2, 1.1)\nE AssertionError\n\ntest/test_core.py:546: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_get_item_sort_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6585335731506348}, {"mutant": {"mutator_name": "DictArray", "lineno": 221, "col_offset": 52, "end_lineno": 221, "end_col_offset": 86, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:221\n@@ -218,7 +218,7 @@\n \"\"\"Build Combined Sort Key for this Item using the Bucket Keys and Item Keys stored in SortConfig.\"\"\"\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- return (SortConfig.bucket_sort_keys[bucket_id], SortConfig.item_sort_keys[node_id])\n+ return (SortConfig.bucket_sort_keys[bucket_id], None)\n \n \n def sort_items(items: list[pytest.Item]) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 0%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 2%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 3%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 4%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key FAILED [ 5%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateSortKey.test_get_item_sort_key ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_get_item_sort_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n core.SortConfig.item_sort_keys = {func.nodeid: 1.1}\n core.SortConfig.item_bucket_id = {func.nodeid: cls.nodeid}\n core.SortConfig.bucket_sort_keys = {cls.nodeid: 2.2}\n \n> assert core.get_item_sort_key(func) == (2.2, 1.1)\nE AssertionError\n\ntest/test_core.py:546: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_get_item_sort_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 8 passed in 0.27s ==========================\n\n"}, "duration": 0.6478574275970459}, {"mutant": {"mutator_name": "DictArray", "lineno": 249, "col_offset": 42, "end_lineno": 249, "end_col_offset": 69, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:249\n@@ -246,7 +246,7 @@\n \n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n- nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n+ nodeids = list({rpt.nodeid for rpt in None})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n> nodeids = list({rpt.nodeid for rpt in None})\nE TypeError: 'NoneType' object is not iterable\n\n.poodle-temp/run-219/src/pytest_sort/core.py:249: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: 'NoneType' object is not iterable\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.47026538848876953}, {"mutant": {"mutator_name": "DictArray", "lineno": 265, "col_offset": 22, "end_lineno": 265, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:265\n@@ -262,7 +262,7 @@\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n- setup_ns = f\"{stats['setup']:,}\"\n+ setup_ns = f\"{None:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n> setup_ns = f\"{None:,}\"\nE TypeError: unsupported format string passed to NoneType.__format__\n\n.poodle-temp/run-220/src/pytest_sort/core.py:265: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: unsupported format string passed to NoneType.__format__\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5960597991943359}, {"mutant": {"mutator_name": "DictArray", "lineno": 266, "col_offset": 21, "end_lineno": 266, "end_col_offset": 34, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:266\n@@ -263,7 +263,7 @@\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n- call_ns = f\"{stats['call']:,}\"\n+ call_ns = f\"{None:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n> call_ns = f\"{None:,}\"\nE TypeError: unsupported format string passed to NoneType.__format__\n\n.poodle-temp/run-221/src/pytest_sort/core.py:266: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: unsupported format string passed to NoneType.__format__\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.44947314262390137}, {"mutant": {"mutator_name": "DictArray", "lineno": 267, "col_offset": 25, "end_lineno": 267, "end_col_offset": 42, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:267\n@@ -264,7 +264,7 @@\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n- teardown_ns = f\"{stats['teardown']:,}\"\n+ teardown_ns = f\"{None:,}\"\n total_ns = f\"{stats['total']:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n> teardown_ns = f\"{None:,}\"\nE TypeError: unsupported format string passed to NoneType.__format__\n\n.poodle-temp/run-222/src/pytest_sort/core.py:267: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: unsupported format string passed to NoneType.__format__\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.651944637298584}, {"mutant": {"mutator_name": "DictArray", "lineno": 268, "col_offset": 22, "end_lineno": 268, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:268\n@@ -265,7 +265,7 @@\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n- total_ns = f\"{stats['total']:,}\"\n+ total_ns = f\"{None:,}\"\n print(\n f\"{nodeid.ljust(node_id_width)} {setup_ns.rjust(stat_width)} \"\n f\"{call_ns.rjust(stat_width)} {teardown_ns.rjust(stat_width)} {total_ns.rjust(stat_width)}\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestPrintReports.test_print_recorded_times_report _______________\n\nself = \nmock_print = \nget_stats = \n\n def test_print_recorded_times_report(self, mock_print, get_stats):\n terminal_reporter = mock.MagicMock(\n stats={\n \"\": [\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n ]\n }\n )\n \n stats = {\n \"function_1\": {\"setup\": 100, \"call\": 200, \"teardown\": 300, \"total\": 600},\n \"function_2\": {\"setup\": 100_000, \"call\": 200_000, \"teardown\": 300_000, \"total\": 600_000},\n \"function_3\": {\"setup\": 1_000_000, \"call\": 2_000_000, \"teardown\": 3_000_000, \"total\": 6_000_000},\n \"function_4\": {\"setup\": 1, \"call\": 2, \"teardown\": 3, \"total\": 6},\n }\n \n get_stats.side_effect = lambda nodeid: stats[nodeid]\n \n> core.print_recorded_times_report(terminal_reporter)\n\ntest/test_core.py:804: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nterminal_reporter = \n\n def print_recorded_times_report(terminal_reporter: TerminalReporter) -> None:\n \"\"\"Print a summary report of maximum recorded times.\"\"\"\n nodeids = list({rpt.nodeid for rpt in terminal_reporter.stats[\"\"]})\n nodeids.sort()\n \n node_id_width = max([len(nodeid) for nodeid in nodeids]) + 3\n stat_width = 16\n \n print(\n f\"\\n*** {'pytest-sort maximum recorded times'.ljust(node_id_width)}\"\n f\"{'Nanoseconds'.center(stat_width*4 - 4)} ***\",\n )\n print(\n f\"{'Test Case'.ljust(node_id_width)} {'setup'.rjust(stat_width)} \"\n f\"{'call'.rjust(stat_width)} {'teardown'.rjust(stat_width)} {'total'.rjust(stat_width)}\",\n )\n for nodeid in nodeids:\n stats = get_stats(nodeid)\n setup_ns = f\"{stats['setup']:,}\"\n call_ns = f\"{stats['call']:,}\"\n teardown_ns = f\"{stats['teardown']:,}\"\n> total_ns = f\"{None:,}\"\nE TypeError: unsupported format string passed to NoneType.__format__\n\n.poodle-temp/run-223/src/pytest_sort/core.py:268: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_recorded_times_report - TypeError: unsupported format string passed to NoneType.__format__\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.41417598724365234}, {"mutant": {"mutator_name": "DictArray", "lineno": 281, "col_offset": 20, "end_lineno": 281, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:281\n@@ -278,5 +278,5 @@\n print(\"(bucket_key, bucket_id, item_key, item_id)\")\n for item in items:\n node_id = item.nodeid\n- bucket_id = SortConfig.item_bucket_id[node_id]\n+ bucket_id = None\n print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, SortConfig.item_sort_keys[node_id], node_id))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n> core.print_test_case_order(items)\n\ntest/test_core.py:844: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitems = [, , , ]\n\n def print_test_case_order(items: list[pytest.Item]) -> None:\n \"\"\"Print test items sort data: bucket_key, bucket_id, item_key, item_id.\"\"\"\n print(\"\\nTest Case Order:\")\n print(\"(bucket_key, bucket_id, item_key, item_id)\")\n for item in items:\n node_id = item.nodeid\n bucket_id = None\n> print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, SortConfig.item_sort_keys[node_id], node_id))\nE KeyError: None\n\n.poodle-temp/run-224/src/pytest_sort/core.py:282: KeyError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - KeyError: None\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6457104682922363}, {"mutant": {"mutator_name": "DictArray", "lineno": 282, "col_offset": 15, "end_lineno": 282, "end_col_offset": 53, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:282\n@@ -279,4 +279,4 @@\n for item in items:\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, SortConfig.item_sort_keys[node_id], node_id))\n+ print((None, bucket_id, SortConfig.item_sort_keys[node_id], node_id))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((None, 'bucket_1', 1, 'function_1')),\nE call((None, 'bucket_1', 2, 'function_2')),\nE call((None, 'bucket_2', 3, 'function_3')),\nE call((None, 'bucket_2', 4, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((None, 'bucket_1', 1, 'function_1')),\n call((None, 'bucket_1', 2, 'function_2')),\n call((None, 'bucket_2', 3, 'function_3')),\n call((None, 'bucket_2', 4, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.5534770488739014}, {"mutant": {"mutator_name": "DictArray", "lineno": 282, "col_offset": 66, "end_lineno": 282, "end_col_offset": 100, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:282\n@@ -279,4 +279,4 @@\n for item in items:\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, SortConfig.item_sort_keys[node_id], node_id))\n+ print((SortConfig.bucket_sort_keys[bucket_id], bucket_id, None, node_id))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestPrintReports::test_print_test_case_order FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestPrintReports.test_print_test_case_order __________________\n\nself = \nmock_print = \n\n def test_print_test_case_order(self, mock_print):\n items = [\n mock.MagicMock(nodeid=\"function_1\"),\n mock.MagicMock(nodeid=\"function_2\"),\n mock.MagicMock(nodeid=\"function_3\"),\n mock.MagicMock(nodeid=\"function_4\"),\n ]\n core.SortConfig.item_bucket_id = {\n \"function_1\": \"bucket_1\",\n \"function_2\": \"bucket_1\",\n \"function_3\": \"bucket_2\",\n \"function_4\": \"bucket_2\",\n }\n core.SortConfig.bucket_sort_keys = {\n \"bucket_1\": 1,\n \"bucket_2\": 2,\n }\n core.SortConfig.item_sort_keys = {\n \"function_1\": 1,\n \"function_2\": 2,\n \"function_3\": 3,\n \"function_4\": 4,\n }\n \n core.print_test_case_order(items)\n \n> mock_print.assert_has_calls(\n [\n mock.call(\"\\nTest Case Order:\"),\n mock.call(\"(bucket_key, bucket_id, item_key, item_id)\"),\n mock.call((1, \"bucket_1\", 1, \"function_1\")),\n mock.call((1, \"bucket_1\", 2, \"function_2\")),\n mock.call((2, \"bucket_2\", 3, \"function_3\")),\n mock.call((2, \"bucket_2\", 4, \"function_4\")),\n ]\n )\n\ntest/test_core.py:846: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('\\nTest Case Order:'), call('(bucket_key, bucket_id, item_key, item_id)'), call((1, 'bucket_1', 1, 'function_1')), call((1, 'bucket_1', 2, 'function_2')), call((2, 'bucket_2', 3, 'function_3')), call((2, 'bucket_2', 4, 'function_4'))]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', 1, 'function_1')),\nE call((1, 'bucket_1', 2, 'function_2')),\nE call((2, 'bucket_2', 3, 'function_3')),\nE call((2, 'bucket_2', 4, 'function_4'))]\nE Actual: [call('\\nTest Case Order:'),\nE call('(bucket_key, bucket_id, item_key, item_id)'),\nE call((1, 'bucket_1', None, 'function_1')),\nE call((1, 'bucket_1', None, 'function_2')),\nE call((2, 'bucket_2', None, 'function_3')),\nE call((2, 'bucket_2', None, 'function_4'))]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestPrintReports::test_print_test_case_order - AssertionError: Calls not found.\nExpected: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', 1, 'function_1')),\n call((1, 'bucket_1', 2, 'function_2')),\n call((2, 'bucket_2', 3, 'function_3')),\n call((2, 'bucket_2', 4, 'function_4'))]\n Actual: [call('\\nTest Case Order:'),\n call('(bucket_key, bucket_id, item_key, item_id)'),\n call((1, 'bucket_1', None, 'function_1')),\n call((1, 'bucket_1', None, 'function_2')),\n call((2, 'bucket_2', None, 'function_3')),\n call((2, 'bucket_2', None, 'function_4'))]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.33s ===============================\n\n"}, "duration": 0.5978233814239502}, {"mutant": {"mutator_name": "Lambda", "lineno": 72, "col_offset": 15, "end_lineno": 72, "end_col_offset": 30, "text": "lambda item: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:72\n@@ -69,7 +69,7 @@\n \n \n create_bucket_id = {\n- \"session\": lambda item: \"\",\n+ \"session\": lambda item: None,\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id[\"session\"](func) == \"\"\nE AssertionError\n\ntest/test_core.py:135: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.24s ==========================\n\n"}, "duration": 0.5888829231262207}, {"mutant": {"mutator_name": "Lambda", "lineno": 76, "col_offset": 16, "end_lineno": 76, "end_col_offset": 40, "text": "lambda item: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:76\n@@ -73,7 +73,7 @@\n \"package\": create_bucket_id_for_package,\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n- \"function\": lambda item: item.nodeid,\n+ \"function\": lambda item: None,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\n assert core.create_bucket_id[\"module\"](func) == \"tests/core/test_core.py\"\n assert core.create_bucket_id[\"class\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id[\"function\"](func) == \"tests/core/test_core.py::TestCoreStuff::test_init\"\nE AssertionError\n\ntest/test_core.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.20s ==========================\n\n"}, "duration": 0.5153312683105469}, {"mutant": {"mutator_name": "Lambda", "lineno": 77, "col_offset": 14, "end_lineno": 77, "end_col_offset": 66, "text": "lambda item: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:77\n@@ -74,7 +74,7 @@\n \"module\": create_bucket_id_for_module,\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n- \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n+ \"parent\": lambda item: None,\n \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n }\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-229/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-229/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-229/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-229/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-229/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: startswith first arg must be str or a tuple of str, not NoneType\n\n============================ no tests ran in 0.12s =============================\n\n"}, "duration": 0.46684980392456055}, {"mutant": {"mutator_name": "Lambda", "lineno": 78, "col_offset": 19, "end_lineno": 78, "end_col_offset": 78, "text": "lambda item: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:78\n@@ -75,7 +75,7 @@\n \"class\": create_bucket_id_for_class,\n \"function\": lambda item: item.nodeid,\n \"parent\": lambda item: create_bucket_id_from_node(item.parent),\n- \"grandparent\": lambda item: create_bucket_id_from_node(item.parent.parent),\n+ \"grandparent\": lambda item: None,\n }\n \n create_item_key = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_bucket_id ___________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id[\"session\"](func) == \"\"\n assert core.create_bucket_id[\"package\"](func) == \"tests/core/\"\n assert core.create_bucket_id[\"module\"](func) == \"tests/core/test_core.py\"\n assert core.create_bucket_id[\"class\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n assert core.create_bucket_id[\"function\"](func) == \"tests/core/test_core.py::TestCoreStuff::test_init\"\n assert core.create_bucket_id[\"parent\"](func) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id[\"grandparent\"](func) == \"tests/core/test_core.py\"\nE AssertionError\n\ntest/test_core.py:141: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_id - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6274735927581787}, {"mutant": {"mutator_name": "Lambda", "lineno": 82, "col_offset": 15, "end_lineno": 82, "end_col_offset": 47, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:82\n@@ -79,7 +79,7 @@\n }\n \n create_item_key = {\n- \"ordered\": lambda item, idx, count: idx + 1,\n+ \"ordered\": lambda item, idx, count: None,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_mode_bucket_key _________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket_key(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", \"test_group_1\", None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\nE AssertionError\n\ntest/test_core.py:462: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4479858875274658}, {"mutant": {"mutator_name": "Lambda", "lineno": 83, "col_offset": 15, "end_lineno": 83, "end_col_offset": 51, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:83\n@@ -80,7 +80,7 @@\n \n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n- \"reverse\": lambda item, idx, count: count - idx,\n+ \"reverse\": lambda item, idx, count: None,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_marker_mode_bucket ___________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_mode_bucket(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (\"reverse\", \"class\", None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:447: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_mode_bucket - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.6672210693359375}, {"mutant": {"mutator_name": "Lambda", "lineno": 84, "col_offset": 11, "end_lineno": 84, "end_col_offset": 70, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:84\n@@ -81,7 +81,7 @@\n create_item_key = {\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n- \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n+ \"md5\": lambda item, idx, count: None,\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n> assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\nE AssertionError\n\ntest/test_core.py:150: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42244839668273926}, {"mutant": {"mutator_name": "Lambda", "lineno": 85, "col_offset": 14, "end_lineno": 85, "end_col_offset": 54, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:85\n@@ -82,7 +82,7 @@\n \"ordered\": lambda item, idx, count: idx + 1,\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n- \"random\": lambda item, idx, count: random.random(),\n+ \"random\": lambda item, idx, count: None,\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________________ TestCreateBucketId.test_create_item_key ____________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_item_key[\"ordered\"](func, 5, 20) == 6\n assert core.create_item_key[\"reverse\"](func, 5, 20) == 15\n \n md5_value = md5(b\"tests/core/test_core.py::TestCoreStuff::test_init\").digest()\n assert core.create_item_key[\"md5\"](func, 5, 20) == md5_value\n \n> assert 0 <= core.create_item_key[\"random\"](func, 5, 20) < 1\nE TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n\ntest/test_core.py:152: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key - TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.29s ==========================\n\n"}, "duration": 0.667224645614624}, {"mutant": {"mutator_name": "Lambda", "lineno": 86, "col_offset": 15, "end_lineno": 86, "end_col_offset": 82, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:86\n@@ -83,7 +83,7 @@\n \"reverse\": lambda item, idx, count: count - idx,\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n- \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n+ \"fastest\": lambda item, idx, count: None,\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n core.create_sort_keys(func, 6, 60)\n \n> assert config.SortConfig.item_sort_keys == {func.nodeid: 1.1}\nE AssertionError\n\ntest/test_core.py:506: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6653919219970703}, {"mutant": {"mutator_name": "Lambda", "lineno": 87, "col_offset": 15, "end_lineno": 87, "end_col_offset": 86, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:87\n@@ -84,7 +84,7 @@\n \"md5\": lambda item, idx, count: md5(item.nodeid.encode()).digest(),\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n- \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n+ \"diffcov\": lambda item, idx, count: None,\n \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestCreateBucketId.test_create_item_key_diffcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_diffcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"diffcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:164: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.4188814163208008}, {"mutant": {"mutator_name": "Lambda", "lineno": 88, "col_offset": 14, "end_lineno": 88, "end_col_offset": 84, "text": "lambda item, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:88\n@@ -85,7 +85,7 @@\n \"random\": lambda item, idx, count: random.random(),\n \"fastest\": lambda item, idx, count: SortConfig.item_totals.get(item.nodeid, 0),\n \"diffcov\": lambda item, idx, count: SortConfig.diff_cov_scores.get(item.nodeid, 0),\n- \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\n+ \"mutcov\": lambda item, idx, count: None,\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 2%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 2%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 3%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov FAILED [ 4%]\n\n=================================== FAILURES ===================================\n________________ TestCreateBucketId.test_create_item_key_mutcov ________________\n\nself = \nmock_objects = (, , , )\n\n def test_create_item_key_mutcov(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_item_key[\"mutcov\"](func, 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:171: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_item_key_mutcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 6 passed in 0.31s ==========================\n\n"}, "duration": 0.6923403739929199}, {"mutant": {"mutator_name": "Lambda", "lineno": 108, "col_offset": 15, "end_lineno": 108, "end_col_offset": 52, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:108\n@@ -105,7 +105,7 @@\n \n \n create_bucket_key = {\n- \"ordered\": lambda bucket_id, idx, count: idx + 1,\n+ \"ordered\": lambda bucket_id, idx, count: None,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestCreateSortKey.test_marker_bucketid_sortkey ________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_marker_bucketid_sortkey(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, \"test/core\", None, 1234)\n config.SortConfig.bucket_mode = \"ordered\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n get_marker_settings.assert_called_with(func)\n \n assert core.SortConfig.item_sort_keys == {func.nodeid: 1234}\n assert core.SortConfig.item_bucket_id == {func.nodeid: \"test/core\"}\n> assert core.SortConfig.bucket_sort_keys == {\"test/core\": 7}\nE AssertionError\n\ntest/test_core.py:435: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.17s ==========================\n\n"}, "duration": 0.42415690422058105}, {"mutant": {"mutator_name": "Lambda", "lineno": 109, "col_offset": 15, "end_lineno": 109, "end_col_offset": 56, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:109\n@@ -106,7 +106,7 @@\n \n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n- \"reverse\": lambda bucket_id, idx, count: count - idx,\n+ \"reverse\": lambda bucket_id, idx, count: None,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________ TestCreateSortKey.test_mode_ordered_reverse __________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_ordered_reverse(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"reverse\"\n (session, package, module, cls, func) = mock_objects\n \n core.create_sort_keys(func, 6, 60)\n \n assert config.SortConfig.item_sort_keys == {func.nodeid: 7}\n assert config.SortConfig.item_bucket_id == {func.nodeid: module.nodeid}\n> assert config.SortConfig.bucket_sort_keys == {module.nodeid: 54}\nE AssertionError\n\ntest/test_core.py:477: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.20s ==========================\n\n"}, "duration": 0.5665693283081055}, {"mutant": {"mutator_name": "Lambda", "lineno": 110, "col_offset": 11, "end_lineno": 110, "end_col_offset": 73, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:110\n@@ -107,7 +107,7 @@\n create_bucket_key = {\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n- \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n+ \"md5\": lambda bucket_id, idx, count: None,\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateSortKey.test_min_bucket_key_md5 ___________________\n\nself = \nmd5 = \nget_marker_settings = \nmock_objects = (, , , )\n\n @mock.patch(\"pytest_sort.core.md5\")\n def test_min_bucket_key_md5(self, md5, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.bucket_mode = \"md5\"\n (session, package, module, cls, func) = mock_objects\n \n md5.return_value.digest.side_effect = [b\"DEF\", b\"ABC\", b\"GHI\"]\n \n core.create_sort_keys(func, 0, 60)\n> core.create_sort_keys(func, 1, 60)\n\ntest/test_core.py:534: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , idx = 1, count = 60\n\n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n \"\"\"Create item and bucket sort keys.\n \n Store in SortConfig.item_sort_keys and SortConfig.bucket_sort_keys\n \"\"\"\n (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\n \n SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\n \n bucket_id = bucket_id or create_bucket_id[bucket or SortConfig.bucket](item)\n SortConfig.item_bucket_id[item.nodeid] = bucket_id\n \n bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\n if bucket_id in SortConfig.bucket_sort_keys:\n> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nE TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n.poodle-temp/run-240/src/pytest_sort/core.py:212: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 - TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.31s ==========================\n\n"}, "duration": 0.6328914165496826}, {"mutant": {"mutator_name": "Lambda", "lineno": 111, "col_offset": 14, "end_lineno": 111, "end_col_offset": 59, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:111\n@@ -108,7 +108,7 @@\n \"ordered\": lambda bucket_id, idx, count: idx + 1,\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n- \"random\": lambda bucket_id, idx, count: random.random(),\n+ \"random\": lambda bucket_id, idx, count: None,\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key FAILED [ 1%]\n\n=================================== FAILURES ===================================\n__________________ TestCreateBucketId.test_create_bucket_key ___________________\n\nself = \n\n def test_create_bucket_key(self):\n assert core.create_bucket_key[\"ordered\"](\"tests\", 5, 20) == 6\n assert core.create_bucket_key[\"reverse\"](\"tests\", 5, 20) == 15\n \n md5_value = md5(b\"tests\").digest()\n assert core.create_bucket_key[\"md5\"](\"tests\", 5, 20) == md5_value\n \n> assert 0 <= core.create_bucket_key[\"random\"](\"tests\", 5, 20) < 1\nE TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n\ntest/test_core.py:182: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key - TypeError: '<=' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.23s ==========================\n\n"}, "duration": 0.6046454906463623}, {"mutant": {"mutator_name": "Lambda", "lineno": 112, "col_offset": 15, "end_lineno": 112, "end_col_offset": 72, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:112\n@@ -109,7 +109,7 @@\n \"reverse\": lambda bucket_id, idx, count: count - idx,\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n- \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n+ \"fastest\": lambda bucket_id, idx, count: None,\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____________________ TestCreateSortKey.test_mode_fastest ______________________\n\nself = \nget_marker_settings = \nmock_objects = (, , , )\n\n def test_mode_fastest(self, get_marker_settings, mock_objects):\n get_marker_settings.return_value = (None, None, None, None, None)\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket = \"class\"\n config.SortConfig.bucket_mode = \"fastest\"\n (session, package, module, cls, func) = mock_objects\n \n config.SortConfig.item_totals = {\n func.nodeid: 1.1,\n func.nodeid + \"_2\": 1.1,\n }\n \n core.create_sort_keys(func, 6, 60)\n \n assert config.SortConfig.item_sort_keys == {func.nodeid: 1.1}\n assert config.SortConfig.item_bucket_id == {func.nodeid: cls.nodeid}\n> assert config.SortConfig.bucket_sort_keys == {cls.nodeid: 2.2}\nE AssertionError\n\ntest/test_core.py:508: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateSortKey::test_mode_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.19s ==========================\n\n"}, "duration": 0.4590282440185547}, {"mutant": {"mutator_name": "Lambda", "lineno": 113, "col_offset": 15, "end_lineno": 113, "end_col_offset": 72, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:113\n@@ -110,7 +110,7 @@\n \"md5\": lambda bucket_id, idx, count: md5(bucket_id.encode()).digest(),\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n- \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n+ \"diffcov\": lambda bucket_id, idx, count: None,\n \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n }\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 0%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 1%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 1%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.28s ==========================\n\n"}, "duration": 0.6119399070739746}, {"mutant": {"mutator_name": "Lambda", "lineno": 114, "col_offset": 14, "end_lineno": 114, "end_col_offset": 75, "text": "lambda bucket_id, idx, count: None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:114\n@@ -111,7 +111,7 @@\n \"random\": lambda bucket_id, idx, count: random.random(),\n \"fastest\": lambda bucket_id, idx, count: get_bucket_total(bucket_id),\n \"diffcov\": lambda bucket_id, idx, count: get_bucket_score(bucket_id),\n- \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\n+ \"mutcov\": lambda bucket_id, idx, count: None,\n }\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-244/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-244/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-244/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5619866847991943}, {"mutant": {"mutator_name": "Return", "lineno": 30, "col_offset": 8, "end_lineno": 30, "end_col_offset": 53, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:30\n@@ -27,7 +27,7 @@\n def create_bucket_id_from_node(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract portion of nodeid needed for bucket key.\"\"\"\n if isinstance(node, pytest.Package):\n- return node.nodeid.replace(\"__init__.py\", \"\")\n+ return None\n \n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Package-test/__init__.py-test/] _\n\nself = \nnode_type = , nodeid = 'test/__init__.py'\nbucket_id = 'test/'\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.43085360527038574}, {"mutant": {"mutator_name": "Return", "lineno": 33, "col_offset": 8, "end_lineno": 33, "end_col_offset": 26, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:33\n@@ -30,7 +30,7 @@\n return node.nodeid.replace(\"__init__.py\", \"\")\n \n if isinstance(node, pytest_nodes.Node):\n- return node.nodeid\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-246/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-246/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-246/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-246/src/pytest_sort/core.py\", line 114, in \nINTERNALERROR> \"mutcov\": lambda bucket_id, idx, count: get_mut_bucket_score(bucket_id),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-246/src/pytest_sort/core.py\", line 104, in get_mut_bucket_score\nINTERNALERROR> return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: startswith first arg must be str or a tuple of str, not NoneType\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.36437225341796875}, {"mutant": {"mutator_name": "Return", "lineno": 35, "col_offset": 4, "end_lineno": 35, "end_col_offset": 13, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:35\n@@ -32,7 +32,7 @@\n if isinstance(node, pytest_nodes.Node):\n return node.nodeid\n \n- return \"\"\n+ return None\n \n \n def create_bucket_id_for_package(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__ TestCreateBucketIdForNode.test_create_bucket_id_from_node[Config-tests|-] ___\n\nself = \nnode_type = , nodeid = 'tests|', bucket_id = ''\n\n @pytest.mark.parametrize(\n (\"node_type\", \"nodeid\", \"bucket_id\"),\n [\n (pytest.Package, \"test/__init__.py\", \"test/\"),\n (pytest.Package, \"tests\", \"tests\"),\n (pytest_nodes.Node, \"test/__init__.py\", \"test/__init__.py\"),\n (pytest_nodes.Node, \"tests\", \"tests\"),\n (pytest.Config, \"tests|\", \"\"),\n ],\n )\n def test_create_bucket_id_from_node(self, node_type, nodeid, bucket_id):\n node = mock.MagicMock(spec=node_type)\n \n node.nodeid = nodeid\n> assert core.create_bucket_id_from_node(node) == bucket_id\nE AssertionError\n\ntest/test_core.py:92: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6411564350128174}, {"mutant": {"mutator_name": "Return", "lineno": 41, "col_offset": 8, "end_lineno": 41, "end_col_offset": 47, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:41\n@@ -38,7 +38,7 @@\n def create_bucket_id_for_package(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract package name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_package(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_package(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:97: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6329083442687988}, {"mutant": {"mutator_name": "Return", "lineno": 44, "col_offset": 8, "end_lineno": 44, "end_col_offset": 56, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:44\n@@ -41,7 +41,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_package(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_package(session) == \"session\"\n assert core.create_bucket_id_for_package(package) == \"tests/core/\"\n> assert core.create_bucket_id_for_package(module) == \"tests/core/\"\nE AssertionError\n\ntest/test_core.py:99: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.16s ===============================\n\n"}, "duration": 0.42846012115478516}, {"mutant": {"mutator_name": "Return", "lineno": 46, "col_offset": 4, "end_lineno": 46, "end_col_offset": 13, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:46\n@@ -43,7 +43,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_package(node.parent)\n \n- return \"\"\n+ return None\n \n \n def create_bucket_id_for_module(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestCreateBucketIdForNode.test_create_bucket_id_for_package __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_package(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_package(session) == \"session\"\n assert core.create_bucket_id_for_package(package) == \"tests/core/\"\n assert core.create_bucket_id_for_package(module) == \"tests/core/\"\n assert core.create_bucket_id_for_package(cls) == \"tests/core/\"\n assert core.create_bucket_id_for_package(func) == \"tests/core/\"\n \n module.parent = None\n> assert core.create_bucket_id_for_package(module) == \"\"\nE AssertionError\n\ntest/test_core.py:104: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.41998958587646484}, {"mutant": {"mutator_name": "Return", "lineno": 52, "col_offset": 8, "end_lineno": 52, "end_col_offset": 47, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:52\n@@ -49,7 +49,7 @@\n def create_bucket_id_for_module(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract module name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_module(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_module(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:109: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6362330913543701}, {"mutant": {"mutator_name": "Return", "lineno": 55, "col_offset": 8, "end_lineno": 55, "end_col_offset": 55, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:55\n@@ -52,7 +52,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_module(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_module(session) == \"session\"\n assert core.create_bucket_id_for_module(package) == \"tests/core/\"\n assert core.create_bucket_id_for_module(module) == \"tests/core/test_core.py\"\n> assert core.create_bucket_id_for_module(cls) == \"tests/core/test_core.py\"\nE AssertionError\n\ntest/test_core.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.635059118270874}, {"mutant": {"mutator_name": "Return", "lineno": 57, "col_offset": 4, "end_lineno": 57, "end_col_offset": 13, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:57\n@@ -54,7 +54,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_module(node.parent)\n \n- return \"\"\n+ return None\n \n \n def create_bucket_id_for_class(node: pytest_nodes.Node | None) -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_module __________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_module(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_module(session) == \"session\"\n assert core.create_bucket_id_for_module(package) == \"tests/core/\"\n assert core.create_bucket_id_for_module(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_module(cls) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_module(func) == \"tests/core/test_core.py\"\n \n cls.parent = None\n> assert core.create_bucket_id_for_module(cls) == \"\"\nE AssertionError\n\ntest/test_core.py:116: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.5144286155700684}, {"mutant": {"mutator_name": "Return", "lineno": 63, "col_offset": 8, "end_lineno": 63, "end_col_offset": 47, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:63\n@@ -60,7 +60,7 @@\n def create_bucket_id_for_class(node: pytest_nodes.Node | None) -> str:\n \"\"\"Extract class or module name from pytest item.\"\"\"\n if isinstance(node, (pytest.Session, pytest.Package, pytest.Module, pytest.Class)):\n- return create_bucket_id_from_node(node)\n+ return None\n \n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_class(node.parent)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n> assert core.create_bucket_id_for_class(session) == \"session\"\nE AssertionError\n\ntest/test_core.py:121: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.48970746994018555}, {"mutant": {"mutator_name": "Return", "lineno": 66, "col_offset": 8, "end_lineno": 66, "end_col_offset": 54, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:66\n@@ -63,7 +63,7 @@\n return create_bucket_id_from_node(node)\n \n if isinstance(node, (pytest_nodes.Node)):\n- return create_bucket_id_for_class(node.parent)\n+ return None\n \n return \"\"\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_class(session) == \"session\"\n assert core.create_bucket_id_for_class(package) == \"tests/core/\"\n assert core.create_bucket_id_for_class(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_class(cls) == \"tests/core/test_core.py::TestCoreStuff\"\n> assert core.create_bucket_id_for_class(func) == \"tests/core/test_core.py::TestCoreStuff\"\nE AssertionError\n\ntest/test_core.py:125: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.5240802764892578}, {"mutant": {"mutator_name": "Return", "lineno": 68, "col_offset": 4, "end_lineno": 68, "end_col_offset": 13, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:68\n@@ -65,7 +65,7 @@\n if isinstance(node, (pytest_nodes.Node)):\n return create_bucket_id_for_class(node.parent)\n \n- return \"\"\n+ return None\n \n \n create_bucket_id = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________ TestCreateBucketIdForNode.test_create_bucket_id_for_class ___________\n\nself = \nmock_objects = (, , , )\n\n def test_create_bucket_id_for_class(self, mock_objects):\n (session, package, module, cls, func) = mock_objects\n \n assert core.create_bucket_id_for_class(session) == \"session\"\n assert core.create_bucket_id_for_class(package) == \"tests/core/\"\n assert core.create_bucket_id_for_class(module) == \"tests/core/test_core.py\"\n assert core.create_bucket_id_for_class(cls) == \"tests/core/test_core.py::TestCoreStuff\"\n assert core.create_bucket_id_for_class(func) == \"tests/core/test_core.py::TestCoreStuff\"\n \n func.parent = None\n> assert core.create_bucket_id_for_class(func) == \"\"\nE AssertionError\n\ntest/test_core.py:128: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.5017943382263184}, {"mutant": {"mutator_name": "Return", "lineno": 94, "col_offset": 4, "end_lineno": 94, "end_col_offset": 107, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:94\n@@ -91,7 +91,7 @@\n \n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Get all totals from nodes matching this bucket and return sum.\"\"\"\n- return sum([total for nodeid, total in SortConfig.item_totals.items() if nodeid.startswith(bucket_id)])\n+ return None\n \n \n def get_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_fastest _______________\n\nself = \n\n def test_create_bucket_key_fastest(self):\n core.SortConfig.item_totals = {}\n> assert core.create_bucket_key[\"fastest\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:186: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6141359806060791}, {"mutant": {"mutator_name": "Return", "lineno": 99, "col_offset": 4, "end_lineno": 99, "end_col_offset": 117, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:99\n@@ -96,7 +96,7 @@\n \n def get_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.diff_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return None\n \n \n def get_mut_bucket_score(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________ TestCreateBucketId.test_create_bucket_key_diffcov _______________\n\nself = \n\n def test_create_bucket_key_diffcov(self):\n core.SortConfig.diff_cov_scores = {}\n> assert core.create_bucket_key[\"diffcov\"](\"tests\", 5, 20) == 0\nE AssertionError\n\ntest/test_core.py:196: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6351661682128906}, {"mutant": {"mutator_name": "Return", "lineno": 104, "col_offset": 4, "end_lineno": 104, "end_col_offset": 116, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:104\n@@ -101,7 +101,7 @@\n \n def get_mut_bucket_score(bucket_id: str) -> int:\n \"\"\"Get all scores from nodes matching this bucket and return min.\"\"\"\n- return min([score for nodeid, score in SortConfig.mut_cov_scores.items() if nodeid.startswith(bucket_id)] + [0])\n+ return None\n \n \n create_bucket_key = {\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-259/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-259/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-259/src/pytest_sort/core.py\", line 212, in create_sort_keys\nINTERNALERROR> SortConfig.bucket_sort_keys[bucket_id] = min(SortConfig.bucket_sort_keys[bucket_id], bucket_key)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.11s =============================\n\n"}, "duration": 0.36279797554016113}, {"mutant": {"mutator_name": "Return", "lineno": 125, "col_offset": 8, "end_lineno": 125, "end_col_offset": 28, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:125\n@@ -122,7 +122,7 @@\n \"\"\"\n \n def mark_order_parse(item_sort_key: Any) -> Any: # noqa: ANN401\n- return item_sort_key\n+ return None\n \n try:\n return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______ TestValidateMarker.test_validate_order_marker[args0-kwargs0-1234] _______\n\nself = \nargs = [1234], kwargs = {}, key = 1234\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([1234], {}, 1234),\n ([], {\"item_sort_key\": 5678}, 5678),\n ],\n )\n def test_validate_order_marker(self, args, kwargs, key):\n order_marker = mock.MagicMock()\n order_marker.args = args\n order_marker.kwargs = kwargs\n \n> assert core.validate_order_marker(order_marker, \"testnodeid\") == key\nE AssertionError\n\ntest/test_core.py:228: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4486715793609619}, {"mutant": {"mutator_name": "Return", "lineno": 128, "col_offset": 8, "end_lineno": 128, "end_col_offset": 74, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:128\n@@ -125,7 +125,7 @@\n return item_sort_key\n \n try:\n- return mark_order_parse(*order_marker.args, **order_marker.kwargs)\n+ return None\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'order'. Target:{node_id}\"\n raise TypeError(msg) from e\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______ TestValidateMarker.test_validate_order_marker[args0-kwargs0-1234] _______\n\nself = \nargs = [1234], kwargs = {}, key = 1234\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([1234], {}, 1234),\n ([], {\"item_sort_key\": 5678}, 5678),\n ],\n )\n def test_validate_order_marker(self, args, kwargs, key):\n order_marker = mock.MagicMock()\n order_marker.args = args\n order_marker.kwargs = kwargs\n \n> assert core.validate_order_marker(order_marker, \"testnodeid\") == key\nE AssertionError\n\ntest/test_core.py:228: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5721273422241211}, {"mutant": {"mutator_name": "Return", "lineno": 141, "col_offset": 8, "end_lineno": 141, "end_col_offset": 29, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:141\n@@ -138,7 +138,7 @@\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n- return (mode, bucket)\n+ return None\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______ TestValidateMarker.test_validate_sort_marker[args0-kwargs0-key0] _______\n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return None\n \n try:\n> (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\nE TypeError: cannot unpack non-iterable NoneType object\n\n.poodle-temp/run-262/src/pytest_sort/core.py:144: TypeError\n\nThe above exception was the direct cause of the following exception:\n\nself = \nargs = ['ordered', 'parent'], kwargs = {}, key = ('ordered', 'parent')\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([\"ordered\", \"parent\"], {}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {\"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([], {\"mode\": \"ordered\", \"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {}, (\"ordered\", \"self\")),\n ],\n )\n def test_validate_sort_marker(self, args, kwargs, key):\n sort_marker = mock.MagicMock()\n sort_marker.args = args\n sort_marker.kwargs = kwargs\n \n> assert core.validate_sort_marker(sort_marker, \"testnodeid\") == key\n\ntest/test_core.py:254: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nsort_marker = , node_id = 'testnodeid'\n\n def validate_sort_marker(sort_marker: pytest.Mark, node_id: str) -> tuple:\n \"\"\"Validate values from sort marker.\n \n Returns (mode, bucket)\n \"\"\"\n \n def mark_sort_parse(mode: str, bucket: str = \"self\") -> tuple:\n return None\n \n try:\n (mode, bucket_temp) = mark_sort_parse(*sort_marker.args, **sort_marker.kwargs)\n except TypeError as e:\n msg = f\"Incorrect arguments on marker 'sort'. Target:{node_id}\"\n> raise TypeError(msg) from e\nE TypeError: Incorrect arguments on marker 'sort'. Target:testnodeid\n\n.poodle-temp/run-262/src/pytest_sort/core.py:147: TypeError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] - TypeError: Incorrect arguments on marker 'sort'. Target:testnodeid\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6472604274749756}, {"mutant": {"mutator_name": "Return", "lineno": 153, "col_offset": 4, "end_lineno": 153, "end_col_offset": 30, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:153\n@@ -150,7 +150,7 @@\n msg = f\"Invalid Value for 'mode' on 'sort' marker. Value:{mode} Target:{node_id}\"\n raise ValueError(msg)\n \n- return (mode, bucket_temp)\n+ return None\n \n \n def get_marker_settings(node: pytest_nodes.Node) -> tuple:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______ TestValidateMarker.test_validate_sort_marker[args0-kwargs0-key0] _______\n\nself = \nargs = ['ordered', 'parent'], kwargs = {}, key = ('ordered', 'parent')\n\n @pytest.mark.parametrize(\n (\"args\", \"kwargs\", \"key\"),\n [\n ([\"ordered\", \"parent\"], {}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {\"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([], {\"mode\": \"ordered\", \"bucket\": \"parent\"}, (\"ordered\", \"parent\")),\n ([\"ordered\"], {}, (\"ordered\", \"self\")),\n ],\n )\n def test_validate_sort_marker(self, args, kwargs, key):\n sort_marker = mock.MagicMock()\n sort_marker.args = args\n sort_marker.kwargs = kwargs\n \n> assert core.validate_sort_marker(sort_marker, \"testnodeid\") == key\nE AssertionError\n\ntest/test_core.py:254: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40355849266052246}, {"mutant": {"mutator_name": "Return", "lineno": 195, "col_offset": 4, "end_lineno": 195, "end_col_offset": 68, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:195\n@@ -192,7 +192,7 @@\n msg = f\"Invalid Value for 'bucket' on 'sort' marker: {bucket_temp}. Target: {node_id}\"\n raise ValueError(msg)\n \n- return (mode, bucket, bucket_id, bucket_sort_key, item_sort_key)\n+ return None\n \n \n def create_sort_keys(item: pytest.Item, idx: int, count: int) -> None:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/core.py\", line 203, in create_sort_keys\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(item)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-264/src/pytest_sort/core.py\", line 172, in get_marker_settings\nINTERNALERROR> (mode, bucket, bucket_id, bucket_sort_key, item_sort_key) = get_marker_settings(node.parent)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> [Previous line repeated 1 more time]\nINTERNALERROR> TypeError: cannot unpack non-iterable NoneType object\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5641598701477051}, {"mutant": {"mutator_name": "Return", "lineno": 221, "col_offset": 4, "end_lineno": 221, "end_col_offset": 87, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/core.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/core.py:221\n@@ -218,7 +218,7 @@\n \"\"\"Build Combined Sort Key for this Item using the Bucket Keys and Item Keys stored in SortConfig.\"\"\"\n node_id = item.nodeid\n bucket_id = SortConfig.item_bucket_id[node_id]\n- return (SortConfig.bucket_sort_keys[bucket_id], SortConfig.item_sort_keys[node_id])\n+ return None\n \n \n def sort_items(items: list[pytest.Item]) -> None:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-265/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-265/src/pytest_sort/core.py\", line 241, in sort_items\nINTERNALERROR> items.sort(key=get_item_sort_key)\nINTERNALERROR> TypeError: '<' not supported between instances of 'NoneType' and 'NoneType'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5690262317657471}, {"mutant": {"mutator_name": "BinOp", "lineno": 8, "col_offset": 16, "end_lineno": 8, "end_col_offset": 48, "text": "Path.cwd() * '.pytest_sort_data'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:8\n@@ -5,7 +5,7 @@\n import json\n from pathlib import Path\n \n-database_file = Path.cwd() / \".pytest_sort_data\"\n+database_file = Path.cwd() * '.pytest_sort_data'\n \n _sort_data: dict = {}\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-266/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-266/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-266/src/pytest_sort/database.py\", line 8, in \n database_file = Path.cwd() * '.pytest_sort_data'\n ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~\nTypeError: can't multiply sequence by non-int of type 'PosixPath'\n"}, "duration": 0.18901562690734863}, {"mutant": {"mutator_name": "BinOp", "lineno": 8, "col_offset": 16, "end_lineno": 8, "end_col_offset": 48, "text": "Path.cwd() - '.pytest_sort_data'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:8\n@@ -5,7 +5,7 @@\n import json\n from pathlib import Path\n \n-database_file = Path.cwd() / \".pytest_sort_data\"\n+database_file = Path.cwd() - '.pytest_sort_data'\n \n _sort_data: dict = {}\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-267/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-267/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-267/src/pytest_sort/database.py\", line 8, in \n database_file = Path.cwd() - '.pytest_sort_data'\n ~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~\nTypeError: unsupported operand type(s) for -: 'PosixPath' and 'str'\n"}, "duration": 0.19054627418518066}, {"mutant": {"mutator_name": "BinOp", "lineno": 53, "col_offset": 29, "end_lineno": 53, "end_col_offset": 91, "text": "node_data['setup'] + node_data['call'] - node_data['teardown']", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data['setup'] + node_data['call'] - node_data['teardown']\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6316115856170654}, {"mutant": {"mutator_name": "BinOp", "lineno": 53, "col_offset": 29, "end_lineno": 53, "end_col_offset": 91, "text": "(node_data['setup'] + node_data['call']) * node_data['teardown']", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = (node_data['setup'] + node_data['call']) * node_data['teardown']\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3925046920776367}, {"mutant": {"mutator_name": "UnaryOp", "lineno": 15, "col_offset": 7, "end_lineno": 15, "end_col_offset": 21, "text": "_sort_data", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:15\n@@ -12,7 +12,7 @@\n \n def _load_data() -> None:\n global _sort_data\n- if not _sort_data and database_file.exists():\n+ if _sort_data and database_file.exists():\n _sort_data = json.loads(database_file.read_text(\"utf-8\"))\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test_load_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test_load_data __________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_load_data(self, database_file, test_file, test_data):\n database_file.exists.return_value = True\n database_file.read_text.return_value = test_file\n \n database._load_data()\n \n> database_file.read_text.assert_called_with(\"utf-8\")\n\ntest/test_database.py:47: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('utf-8',), kwargs = {}, expected = \"read_text('utf-8')\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: read_text('utf-8')\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: read_text('utf-8')\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test_load_data - AssertionError: expected call not found.\nExpected: read_text('utf-8')\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6928708553314209}, {"mutant": {"mutator_name": "Compare", "lineno": 15, "col_offset": 7, "end_lineno": 15, "end_col_offset": 48, "text": "not _sort_data or database_file.exists()", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:15\n@@ -12,7 +12,7 @@\n \n def _load_data() -> None:\n global _sort_data\n- if not _sort_data and database_file.exists():\n+ if not _sort_data or database_file.exists():\n _sort_data = json.loads(database_file.read_text(\"utf-8\"))\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 0%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded FAILED [ 1%]\n\n=================================== FAILURES ===================================\n______________________ TestLoadSave.test_load_data_loaded ______________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_load_data_loaded(self, database_file, test_file, test_data):\n database_file.exists.return_value = True\n database_file.read_text.return_value = test_file\n database._sort_data = test_data\n \n database._load_data()\n \n> database_file.read_text.assert_not_called()\n\ntest/test_database.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_not_called(self):\n \"\"\"assert that the mock was never called.\n \"\"\"\n if self.call_count != 0:\n msg = (\"Expected '%s' to not have been called. Called %s times.%s\"\n % (self._mock_name or 'mock',\n self.call_count,\n self._calls_repr()))\n> raise AssertionError(msg)\nE AssertionError: Expected 'read_text' to not have been called. Called 1 times.\nE Calls: [call('utf-8')].\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:905: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test_load_data_loaded - AssertionError: Expected 'read_text' to not have been called. Called 1 times.\nCalls: [call('utf-8')].\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.18s ==========================\n\n"}, "duration": 0.4368605613708496}, {"mutant": {"mutator_name": "Compare", "lineno": 42, "col_offset": 11, "end_lineno": 42, "end_col_offset": 37, "text": "node_data['setup'] >= setup", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:42\n@@ -39,7 +39,7 @@\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n- if node_data[\"setup\"] < setup:\n+ if node_data['setup'] >= setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6184601783752441}, {"mutant": {"mutator_name": "Compare", "lineno": 42, "col_offset": 11, "end_lineno": 42, "end_col_offset": 37, "text": "node_data['setup'] <= setup", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:42\n@@ -39,7 +39,7 @@\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n- if node_data[\"setup\"] < setup:\n+ if node_data['setup'] <= setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 2%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock FAILED [ 2%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_mock _________________\n\nself = \ntest_data = {'mocknode': {'call': , 'setup': , 'teardown': database.update_test_cases({\"mocknode\": {\"setup\": 1, \"call\": 2, \"teardown\": 3}})\n\ntest/test_database.py:185: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'mocknode': {'call': 2, 'setup': 1, 'teardown': 3}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n> if node_data['setup'] <= setup:\nE TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n\n.poodle-temp/run-273/src/pytest_sort/database.py:42: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_mock - TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.26s ==========================\n\n"}, "duration": 0.6467797756195068}, {"mutant": {"mutator_name": "Compare", "lineno": 46, "col_offset": 11, "end_lineno": 46, "end_col_offset": 35, "text": "node_data['call'] >= call", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:46\n@@ -43,7 +43,7 @@\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n- if node_data[\"call\"] < call:\n+ if node_data['call'] >= call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3960764408111572}, {"mutant": {"mutator_name": "Compare", "lineno": 46, "col_offset": 11, "end_lineno": 46, "end_col_offset": 35, "text": "node_data['call'] <= call", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:46\n@@ -43,7 +43,7 @@\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n- if node_data[\"call\"] < call:\n+ if node_data['call'] <= call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 2%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock FAILED [ 2%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_mock _________________\n\nself = \ntest_data = {'mocknode': {'call': , 'setup': 1, 'teardown': }, 'te...: 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n @pytest.mark.usefixtures(\"save_data\")\n def test_update_test_cases_update_mock(self, test_data):\n setup = mock.MagicMock()\n call = mock.MagicMock()\n teardown = mock.MagicMock()\n \n node_data = {\n \"setup\": setup,\n \"call\": call,\n \"teardown\": teardown,\n }\n \n test_data[\"mocknode\"] = node_data\n \n setup.__lt__ = lambda _, v: setup.lt(v)\n call.__lt__ = lambda _, v: call.lt(v)\n teardown.__lt__ = lambda _, v: teardown.lt(v)\n \n setup.lt.return_value = True\n call.lt.return_value = True\n teardown.lt.return_value = True\n \n> database.update_test_cases({\"mocknode\": {\"setup\": 1, \"call\": 2, \"teardown\": 3}})\n\ntest/test_database.py:185: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'mocknode': {'call': 2, 'setup': 1, 'teardown': 3}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n> if node_data['call'] <= call:\nE TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n\n.poodle-temp/run-275/src/pytest_sort/database.py:46: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_mock - TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.27s ==========================\n\n"}, "duration": 0.6526455879211426}, {"mutant": {"mutator_name": "Compare", "lineno": 50, "col_offset": 11, "end_lineno": 50, "end_col_offset": 43, "text": "node_data['teardown'] >= teardown", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:50\n@@ -47,7 +47,7 @@\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n- if node_data[\"teardown\"] < teardown:\n+ if node_data['teardown'] >= teardown:\n node_data[\"teardown\"] = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3960132598876953}, {"mutant": {"mutator_name": "Compare", "lineno": 50, "col_offset": 11, "end_lineno": 50, "end_col_offset": 43, "text": "node_data['teardown'] <= teardown", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:50\n@@ -47,7 +47,7 @@\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n- if node_data[\"teardown\"] < teardown:\n+ if node_data['teardown'] <= teardown:\n node_data[\"teardown\"] = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 2%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock FAILED [ 2%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_mock _________________\n\nself = \ntest_data = {'mocknode': {'call': 2, 'setup': 1, 'teardown': }, 'test/test_core.py::TestClass::tes...: 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n @pytest.mark.usefixtures(\"save_data\")\n def test_update_test_cases_update_mock(self, test_data):\n setup = mock.MagicMock()\n call = mock.MagicMock()\n teardown = mock.MagicMock()\n \n node_data = {\n \"setup\": setup,\n \"call\": call,\n \"teardown\": teardown,\n }\n \n test_data[\"mocknode\"] = node_data\n \n setup.__lt__ = lambda _, v: setup.lt(v)\n call.__lt__ = lambda _, v: call.lt(v)\n teardown.__lt__ = lambda _, v: teardown.lt(v)\n \n setup.lt.return_value = True\n call.lt.return_value = True\n teardown.lt.return_value = True\n \n> database.update_test_cases({\"mocknode\": {\"setup\": 1, \"call\": 2, \"teardown\": 3}})\n\ntest/test_database.py:185: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'mocknode': {'call': 2, 'setup': 1, 'teardown': 3}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n> if node_data['teardown'] <= teardown:\nE TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n\n.poodle-temp/run-277/src/pytest_sort/database.py:50: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_mock - TypeError: '<=' not supported between instances of 'MagicMock' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.25s ==========================\n\n"}, "duration": 0.6542086601257324}, {"mutant": {"mutator_name": "Number", "lineno": 20, "col_offset": 59, "end_lineno": 20, "end_col_offset": 60, "text": "5", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:20\n@@ -17,7 +17,7 @@\n \n \n def _save_data() -> None:\n- database_file.write_text(json.dumps(_sort_data, indent=4), \"utf-8\")\n+ database_file.write_text(json.dumps(_sort_data, indent=5), \"utf-8\")\n \n \n def clear_db() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test__save_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test__save_data _________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test__save_data(self, database_file, test_file, test_data):\n database._sort_data = test_data\n \n database._save_data()\n \n> database_file.write_text.assert_called_with(test_file, \"utf-8\")\n\ntest/test_database.py:74: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\":...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nkwargs = {}\nexpected = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardo...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nactual = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n ...\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n_error_message = ._error_message at 0x7f550fc9fce0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nE Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test__save_data - AssertionError: expected call not found.\nExpected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.44152331352233887}, {"mutant": {"mutator_name": "Number", "lineno": 20, "col_offset": 59, "end_lineno": 20, "end_col_offset": 60, "text": "3", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:20\n@@ -17,7 +17,7 @@\n \n \n def _save_data() -> None:\n- database_file.write_text(json.dumps(_sort_data, indent=4), \"utf-8\")\n+ database_file.write_text(json.dumps(_sort_data, indent=3), \"utf-8\")\n \n \n def clear_db() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test__save_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test__save_data _________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test__save_data(self, database_file, test_file, test_data):\n database._sort_data = test_data\n \n database._save_data()\n \n> database_file.write_text.assert_called_with(test_file, \"utf-8\")\n\ntest/test_database.py:74: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\":...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nkwargs = {}\nexpected = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardo...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nactual = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,...::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n_error_message = ._error_message at 0x7fbce0445580>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nE Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test__save_data - AssertionError: expected call not found.\nExpected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.7025504112243652}, {"mutant": {"mutator_name": "Number", "lineno": 37, "col_offset": 52, "end_lineno": 37, "end_col_offset": 53, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data[\"setup\"] = node_data.get(\"setup\", 1)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.15s ==========================\n\n"}, "duration": 0.39763784408569336}, {"mutant": {"mutator_name": "Number", "lineno": 37, "col_offset": 52, "end_lineno": 37, "end_col_offset": 53, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data[\"setup\"] = node_data.get(\"setup\", -1)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.5882914066314697}, {"mutant": {"mutator_name": "Number", "lineno": 38, "col_offset": 50, "end_lineno": 38, "end_col_offset": 51, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data[\"call\"] = node_data.get(\"call\", 1)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.26s ==========================\n\n"}, "duration": 0.610053539276123}, {"mutant": {"mutator_name": "Number", "lineno": 38, "col_offset": 50, "end_lineno": 38, "end_col_offset": 51, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data[\"call\"] = node_data.get(\"call\", -1)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.0366289615631104}, {"mutant": {"mutator_name": "Number", "lineno": 39, "col_offset": 58, "end_lineno": 39, "end_col_offset": 59, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data[\"teardown\"] = node_data.get(\"teardown\", 1)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.25s ==========================\n\n"}, "duration": 0.6379179954528809}, {"mutant": {"mutator_name": "Number", "lineno": 39, "col_offset": 58, "end_lineno": 39, "end_col_offset": 59, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data[\"teardown\"] = node_data.get(\"teardown\", -1)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.1124241352081299}, {"mutant": {"mutator_name": "Number", "lineno": 41, "col_offset": 52, "end_lineno": 41, "end_col_offset": 53, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = recorded_times[nodeid].get(\"setup\", 1)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.22s ==========================\n\n"}, "duration": 0.5083761215209961}, {"mutant": {"mutator_name": "Number", "lineno": 41, "col_offset": 52, "end_lineno": 41, "end_col_offset": 53, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = recorded_times[nodeid].get(\"setup\", -1)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.5995748043060303}, {"mutant": {"mutator_name": "Number", "lineno": 45, "col_offset": 50, "end_lineno": 45, "end_col_offset": 51, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = recorded_times[nodeid].get(\"call\", 1)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.26s ==========================\n\n"}, "duration": 0.6439194679260254}, {"mutant": {"mutator_name": "Number", "lineno": 45, "col_offset": 50, "end_lineno": 45, "end_col_offset": 51, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = recorded_times[nodeid].get(\"call\", -1)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.0356950759887695}, {"mutant": {"mutator_name": "Number", "lineno": 49, "col_offset": 58, "end_lineno": 49, "end_col_offset": 59, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = recorded_times[nodeid].get(\"teardown\", 1)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults FAILED [ 2%]\n\n=================================== FAILURES ===================================\n______________ TestUpdate.test_update_test_cases_update_defaults _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_defaults(self, save_data):\n database.update_test_cases({\"test/test_core.py::test_default\": {}})\n> assert database._sort_data[\"test/test_core.py::test_default\"] == {\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n }\nE AssertionError\n\ntest/test_database.py:155: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.25s ==========================\n\n"}, "duration": 0.6330134868621826}, {"mutant": {"mutator_name": "Number", "lineno": 49, "col_offset": 58, "end_lineno": 49, "end_col_offset": 59, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = recorded_times[nodeid].get(\"teardown\", -1)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.5879626274108887}, {"mutant": {"mutator_name": "Number", "lineno": 78, "col_offset": 21, "end_lineno": 78, "end_col_offset": 22, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:78\n@@ -75,7 +75,7 @@\n return _sort_data.get(\n nodeid,\n {\n- \"setup\": 0,\n+ \"setup\": 1,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.24s ==========================\n\n"}, "duration": 0.6242456436157227}, {"mutant": {"mutator_name": "Number", "lineno": 78, "col_offset": 21, "end_lineno": 78, "end_col_offset": 22, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:78\n@@ -75,7 +75,7 @@\n return _sort_data.get(\n nodeid,\n {\n- \"setup\": 0,\n+ \"setup\": -1,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.15s ==========================\n\n"}, "duration": 0.39818334579467773}, {"mutant": {"mutator_name": "Number", "lineno": 79, "col_offset": 20, "end_lineno": 79, "end_col_offset": 21, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:79\n@@ -76,7 +76,7 @@\n nodeid,\n {\n \"setup\": 0,\n- \"call\": 0,\n+ \"call\": 1,\n \"teardown\": 0,\n \"total\": 0,\n },\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.24s ==========================\n\n"}, "duration": 0.6252903938293457}, {"mutant": {"mutator_name": "Number", "lineno": 79, "col_offset": 20, "end_lineno": 79, "end_col_offset": 21, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:79\n@@ -76,7 +76,7 @@\n nodeid,\n {\n \"setup\": 0,\n- \"call\": 0,\n+ \"call\": -1,\n \"teardown\": 0,\n \"total\": 0,\n },\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.14s ==========================\n\n"}, "duration": 0.3943607807159424}, {"mutant": {"mutator_name": "Number", "lineno": 80, "col_offset": 24, "end_lineno": 80, "end_col_offset": 25, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:80\n@@ -77,7 +77,7 @@\n {\n \"setup\": 0,\n \"call\": 0,\n- \"teardown\": 0,\n+ \"teardown\": 1,\n \"total\": 0,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.14s ==========================\n\n"}, "duration": 0.41577696800231934}, {"mutant": {"mutator_name": "Number", "lineno": 80, "col_offset": 24, "end_lineno": 80, "end_col_offset": 25, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:80\n@@ -77,7 +77,7 @@\n {\n \"setup\": 0,\n \"call\": 0,\n- \"teardown\": 0,\n+ \"teardown\": -1,\n \"total\": 0,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.25s ==========================\n\n"}, "duration": 0.6226449012756348}, {"mutant": {"mutator_name": "Number", "lineno": 81, "col_offset": 21, "end_lineno": 81, "end_col_offset": 22, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:81\n@@ -78,6 +78,6 @@\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n- \"total\": 0,\n+ \"total\": 1,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.14s ==========================\n\n"}, "duration": 0.4122896194458008}, {"mutant": {"mutator_name": "Number", "lineno": 81, "col_offset": 21, "end_lineno": 81, "end_col_offset": 22, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:81\n@@ -78,6 +78,6 @@\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n- \"total\": 0,\n+ \"total\": -1,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.19s ==========================\n\n"}, "duration": 0.5750055313110352}, {"mutant": {"mutator_name": "String", "lineno": 8, "col_offset": 29, "end_lineno": 8, "end_col_offset": 48, "text": "'XX.pytest_sort_dataXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:8\n@@ -5,7 +5,7 @@\n import json\n from pathlib import Path\n \n-database_file = Path.cwd() / \".pytest_sort_data\"\n+database_file = Path.cwd() / 'XX.pytest_sort_dataXX'\n \n _sort_data: dict = {}\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 2%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n assert config.SortConfig.report is False\n assert config.SortConfig.seed == seed\n \n> assert database.database_file.absolute() == (Path.cwd() / \".pytest_sort_data\").absolute()\nE AssertionError\n\ntest/test_config.py:83: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.16s ==========================\n\n"}, "duration": 0.4397907257080078}, {"mutant": {"mutator_name": "String", "lineno": 16, "col_offset": 56, "end_lineno": 16, "end_col_offset": 63, "text": "'XXutf-8XX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:16\n@@ -13,7 +13,7 @@\n def _load_data() -> None:\n global _sort_data\n if not _sort_data and database_file.exists():\n- _sort_data = json.loads(database_file.read_text(\"utf-8\"))\n+ _sort_data = json.loads(database_file.read_text('XXutf-8XX'))\n \n \n def _save_data() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test_load_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test_load_data __________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_load_data(self, database_file, test_file, test_data):\n database_file.exists.return_value = True\n database_file.read_text.return_value = test_file\n \n database._load_data()\n \n> database_file.read_text.assert_called_with(\"utf-8\")\n\ntest/test_database.py:47: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('utf-8',), kwargs = {}, expected = call('utf-8')\nactual = call('XXutf-8XX')\n_error_message = ._error_message at 0x7f086b2bb600>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: read_text('utf-8')\nE Actual: read_text('XXutf-8XX')\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test_load_data - AssertionError: expected call not found.\nExpected: read_text('utf-8')\n Actual: read_text('XXutf-8XX')\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6946465969085693}, {"mutant": {"mutator_name": "String", "lineno": 20, "col_offset": 63, "end_lineno": 20, "end_col_offset": 70, "text": "'XXutf-8XX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:20\n@@ -17,7 +17,7 @@\n \n \n def _save_data() -> None:\n- database_file.write_text(json.dumps(_sort_data, indent=4), \"utf-8\")\n+ database_file.write_text(json.dumps(_sort_data, indent=4), 'XXutf-8XX')\n \n \n def clear_db() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test__save_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test__save_data _________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test__save_data(self, database_file, test_file, test_data):\n database._sort_data = test_data\n \n database._save_data()\n \n> database_file.write_text.assert_called_with(test_file, \"utf-8\")\n\ntest/test_database.py:74: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\":...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nkwargs = {}\nexpected = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardo...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nactual = call('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardo...]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'XXutf-8XX')\n_error_message = ._error_message at 0x7f218c935300>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nE Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'XXutf-8XX')\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test__save_data - AssertionError: expected call not found.\nExpected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n Actual: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'XXutf-8XX')\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6890792846679688}, {"mutant": {"mutator_name": "String", "lineno": 37, "col_offset": 18, "end_lineno": 37, "end_col_offset": 25, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data['XXsetupXX'] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.39128899574279785}, {"mutant": {"mutator_name": "String", "lineno": 37, "col_offset": 43, "end_lineno": 37, "end_col_offset": 50, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data[\"setup\"] = node_data.get('XXsetupXX', 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4609794616699219}, {"mutant": {"mutator_name": "String", "lineno": 38, "col_offset": 18, "end_lineno": 38, "end_col_offset": 24, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data['XXcallXX'] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.5995004177093506}, {"mutant": {"mutator_name": "String", "lineno": 38, "col_offset": 42, "end_lineno": 38, "end_col_offset": 48, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data[\"call\"] = node_data.get('XXcallXX', 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.22s ===============================\n\n"}, "duration": 0.6011128425598145}, {"mutant": {"mutator_name": "String", "lineno": 39, "col_offset": 18, "end_lineno": 39, "end_col_offset": 28, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data['XXteardownXX'] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.4725971221923828}, {"mutant": {"mutator_name": "String", "lineno": 39, "col_offset": 46, "end_lineno": 39, "end_col_offset": 56, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data[\"teardown\"] = node_data.get('XXteardownXX', 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4530634880065918}, {"mutant": {"mutator_name": "String", "lineno": 41, "col_offset": 43, "end_lineno": 41, "end_col_offset": 50, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = recorded_times[nodeid].get('XXsetupXX', 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.25s ==========================\n\n"}, "duration": 0.5603070259094238}, {"mutant": {"mutator_name": "String", "lineno": 42, "col_offset": 21, "end_lineno": 42, "end_col_offset": 28, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:42\n@@ -39,7 +39,7 @@\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n- if node_data[\"setup\"] < setup:\n+ if node_data['XXsetupXX'] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n> if node_data['XXsetupXX'] < setup:\nE KeyError: 'XXsetupXX'\n\n.poodle-temp/run-310/src/pytest_sort/database.py:42: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXsetupXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.17s ===============================\n\n"}, "duration": 0.5388095378875732}, {"mutant": {"mutator_name": "String", "lineno": 43, "col_offset": 22, "end_lineno": 43, "end_col_offset": 29, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:43\n@@ -40,7 +40,7 @@\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n- node_data[\"setup\"] = setup\n+ node_data['XXsetupXX'] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.5471134185791016}, {"mutant": {"mutator_name": "String", "lineno": 45, "col_offset": 42, "end_lineno": 45, "end_col_offset": 48, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = recorded_times[nodeid].get('XXcallXX', 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.16s ==========================\n\n"}, "duration": 0.5310037136077881}, {"mutant": {"mutator_name": "String", "lineno": 46, "col_offset": 21, "end_lineno": 46, "end_col_offset": 27, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:46\n@@ -43,7 +43,7 @@\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n- if node_data[\"call\"] < call:\n+ if node_data['XXcallXX'] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n> if node_data['XXcallXX'] < call:\nE KeyError: 'XXcallXX'\n\n.poodle-temp/run-313/src/pytest_sort/database.py:46: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXcallXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.4853646755218506}, {"mutant": {"mutator_name": "String", "lineno": 47, "col_offset": 22, "end_lineno": 47, "end_col_offset": 28, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:47\n@@ -44,7 +44,7 @@\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n- node_data[\"call\"] = call\n+ node_data['XXcallXX'] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6253595352172852}, {"mutant": {"mutator_name": "String", "lineno": 49, "col_offset": 46, "end_lineno": 49, "end_col_offset": 56, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = recorded_times[nodeid].get('XXteardownXX', 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 0%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 1%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.15s ==========================\n\n"}, "duration": 0.3997623920440674}, {"mutant": {"mutator_name": "String", "lineno": 50, "col_offset": 21, "end_lineno": 50, "end_col_offset": 31, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:50\n@@ -47,7 +47,7 @@\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n- if node_data[\"teardown\"] < teardown:\n+ if node_data['XXteardownXX'] < teardown:\n node_data[\"teardown\"] = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n> if node_data['XXteardownXX'] < teardown:\nE KeyError: 'XXteardownXX'\n\n.poodle-temp/run-316/src/pytest_sort/database.py:50: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXteardownXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.618098258972168}, {"mutant": {"mutator_name": "String", "lineno": 51, "col_offset": 22, "end_lineno": 51, "end_col_offset": 32, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:51\n@@ -48,7 +48,7 @@\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n- node_data[\"teardown\"] = teardown\n+ node_data['XXteardownXX'] = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________ TestUpdate.test_update_test_cases_update_greater _______________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_greater(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 2, \"call\": 3, \"teardown\": 4},\n \"test/test_core.py::TestClass::test_case[B]\": {\"setup\": 11, \"call\": 22, \"teardown\": 31},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 2,\n \"call\": 3,\n \"teardown\": 4,\n \"total\": 9,\n }\nE AssertionError\n\ntest/test_database.py:139: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_greater - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4008805751800537}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 18, "end_lineno": 53, "end_col_offset": 25, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data['XXtotalXX'] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6169083118438721}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 39, "end_lineno": 53, "end_col_offset": 46, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data['XXsetupXX'] + node_data[\"call\"] + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = node_data['XXsetupXX'] + node_data[\"call\"] + node_data[\"teardown\"]\nE KeyError: 'XXsetupXX'\n\n.poodle-temp/run-319/src/pytest_sort/database.py:53: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXsetupXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6237592697143555}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 60, "end_lineno": 53, "end_col_offset": 66, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data[\"setup\"] + node_data['XXcallXX'] + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = node_data[\"setup\"] + node_data['XXcallXX'] + node_data[\"teardown\"]\nE KeyError: 'XXcallXX'\n\n.poodle-temp/run-320/src/pytest_sort/database.py:53: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXcallXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.3979945182800293}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 80, "end_lineno": 53, "end_col_offset": 90, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data['XXteardownXX']\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data['XXteardownXX']\nE KeyError: 'XXteardownXX'\n\n.poodle-temp/run-321/src/pytest_sort/database.py:53: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - KeyError: 'XXteardownXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6177597045898438}, {"mutant": {"mutator_name": "String", "lineno": 63, "col_offset": 39, "end_lineno": 63, "end_col_offset": 46, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:63\n@@ -60,7 +60,7 @@\n def get_all_totals() -> dict:\n \"\"\"Retrieve all total durations for all nodeids.\"\"\"\n _load_data()\n- return {nodeid: _sort_data[nodeid][\"total\"] for nodeid in _sort_data}\n+ return {nodeid: _sort_data[nodeid]['XXtotalXX'] for nodeid in _sort_data}\n \n \n def get_bucket_total(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_all_totals FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestGet.test_get_all_totals __________________________\n\nself = \n\n def test_get_all_totals(self):\n> assert database.get_all_totals() == {\n \"test/test_core.py::TestClass::test_case[A]\": 6,\n \"test/test_core.py::TestClass::test_case[B]\": 63,\n }\n\ntest/test_database.py:204: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n def get_all_totals() -> dict:\n \"\"\"Retrieve all total durations for all nodeids.\"\"\"\n _load_data()\n> return {nodeid: _sort_data[nodeid]['XXtotalXX'] for nodeid in _sort_data}\nE KeyError: 'XXtotalXX'\n\n.poodle-temp/run-322/src/pytest_sort/database.py:63: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_all_totals - KeyError: 'XXtotalXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.39158201217651367}, {"mutant": {"mutator_name": "String", "lineno": 69, "col_offset": 35, "end_lineno": 69, "end_col_offset": 42, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:69\n@@ -66,7 +66,7 @@\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n- return sum([_sort_data[nodeid][\"total\"] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n+ return sum([_sort_data[nodeid]['XXtotalXX'] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n \n \n def get_stats(nodeid: str) -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_bucket_total FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestGet.test_get_bucket_total _________________________\n\nself = \n\n def test_get_bucket_total(self):\n> assert database.get_bucket_total(\"test/test_core.py\") == 69\n\ntest/test_database.py:210: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbucket_id = 'test/test_core.py'\n\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n> return sum([_sort_data[nodeid]['XXtotalXX'] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\nE KeyError: 'XXtotalXX'\n\n.poodle-temp/run-323/src/pytest_sort/database.py:69: KeyError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_bucket_total - KeyError: 'XXtotalXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6176011562347412}, {"mutant": {"mutator_name": "String", "lineno": 78, "col_offset": 12, "end_lineno": 78, "end_col_offset": 19, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:78\n@@ -75,7 +75,7 @@\n return _sort_data.get(\n nodeid,\n {\n- \"setup\": 0,\n+ 'XXsetupXX': 0,\n \"call\": 0,\n \"teardown\": 0,\n \"total\": 0,\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.14s ==========================\n\n"}, "duration": 0.39659857749938965}, {"mutant": {"mutator_name": "String", "lineno": 79, "col_offset": 12, "end_lineno": 79, "end_col_offset": 18, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:79\n@@ -76,7 +76,7 @@\n nodeid,\n {\n \"setup\": 0,\n- \"call\": 0,\n+ 'XXcallXX': 0,\n \"teardown\": 0,\n \"total\": 0,\n },\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.25s ==========================\n\n"}, "duration": 0.6190578937530518}, {"mutant": {"mutator_name": "String", "lineno": 80, "col_offset": 12, "end_lineno": 80, "end_col_offset": 22, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:80\n@@ -77,7 +77,7 @@\n {\n \"setup\": 0,\n \"call\": 0,\n- \"teardown\": 0,\n+ 'XXteardownXX': 0,\n \"total\": 0,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.24s ==========================\n\n"}, "duration": 0.6177165508270264}, {"mutant": {"mutator_name": "String", "lineno": 81, "col_offset": 12, "end_lineno": 81, "end_col_offset": 19, "text": "'XXtotalXX'", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:81\n@@ -78,6 +78,6 @@\n \"setup\": 0,\n \"call\": 0,\n \"teardown\": 0,\n- \"total\": 0,\n+ 'XXtotalXX': 0,\n },\n )\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats PASSED [ 0%]\ntest/test_database.py::TestGet::test_get_stats_not_found FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_______________________ TestGet.test_get_stats_not_found _______________________\n\nself = \n\n def test_get_stats_not_found(self):\n> assert database.get_stats(\"test/test_core.py::test_other\") == {\"setup\": 0, \"call\": 0, \"teardown\": 0, \"total\": 0}\nE AssertionError\n\ntest/test_database.py:224: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats_not_found - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.14s ==========================\n\n"}, "duration": 0.3945810794830322}, {"mutant": {"mutator_name": "FuncCall", "lineno": 8, "col_offset": 16, "end_lineno": 8, "end_col_offset": 26, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:8\n@@ -5,7 +5,7 @@\n import json\n from pathlib import Path\n \n-database_file = Path.cwd() / \".pytest_sort_data\"\n+database_file = None / \".pytest_sort_data\"\n \n _sort_data: dict = {}\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-328/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-328/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-328/src/pytest_sort/database.py\", line 8, in \n database_file = None / \".pytest_sort_data\"\n ~~~~~^~~~~~~~~~~~~~~~~~~~~\nTypeError: unsupported operand type(s) for /: 'NoneType' and 'str'\n"}, "duration": 0.27437806129455566}, {"mutant": {"mutator_name": "FuncCall", "lineno": 15, "col_offset": 26, "end_lineno": 15, "end_col_offset": 48, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:15\n@@ -12,7 +12,7 @@\n \n def _load_data() -> None:\n global _sort_data\n- if not _sort_data and database_file.exists():\n+ if not _sort_data and None:\n _sort_data = json.loads(database_file.read_text(\"utf-8\"))\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test_load_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test_load_data __________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_load_data(self, database_file, test_file, test_data):\n database_file.exists.return_value = True\n database_file.read_text.return_value = test_file\n \n database._load_data()\n \n> database_file.read_text.assert_called_with(\"utf-8\")\n\ntest/test_database.py:47: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('utf-8',), kwargs = {}, expected = \"read_text('utf-8')\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: read_text('utf-8')\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: read_text('utf-8')\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test_load_data - AssertionError: expected call not found.\nExpected: read_text('utf-8')\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.43639206886291504}, {"mutant": {"mutator_name": "FuncCall", "lineno": 16, "col_offset": 21, "end_lineno": 16, "end_col_offset": 65, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:16\n@@ -13,7 +13,7 @@\n def _load_data() -> None:\n global _sort_data\n if not _sort_data and database_file.exists():\n- _sort_data = json.loads(database_file.read_text(\"utf-8\"))\n+ _sort_data = None\n \n \n def _save_data() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test_load_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test_load_data __________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_load_data(self, database_file, test_file, test_data):\n database_file.exists.return_value = True\n database_file.read_text.return_value = test_file\n \n database._load_data()\n \n> database_file.read_text.assert_called_with(\"utf-8\")\n\ntest/test_database.py:47: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('utf-8',), kwargs = {}, expected = \"read_text('utf-8')\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: read_text('utf-8')\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: read_text('utf-8')\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test_load_data - AssertionError: expected call not found.\nExpected: read_text('utf-8')\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6957128047943115}, {"mutant": {"mutator_name": "FuncCall", "lineno": 20, "col_offset": 4, "end_lineno": 20, "end_col_offset": 71, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:20\n@@ -17,7 +17,7 @@\n \n \n def _save_data() -> None:\n- database_file.write_text(json.dumps(_sort_data, indent=4), \"utf-8\")\n+ None\n \n \n def clear_db() -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestLoadSave::test__save_data FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestLoadSave.test__save_data _________________________\n\nself = \ndatabase_file = \ntest_file = '{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": ...s::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}'\ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test__save_data(self, database_file, test_file, test_data):\n database._sort_data = test_data\n \n database._save_data()\n \n> database_file.write_text.assert_called_with(test_file, \"utf-8\")\n\ntest/test_database.py:74: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\":...se[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nkwargs = {}\nexpected = 'write_text(\\'{\\\\n \"test/test_core.py::TestClass::test_case[A]\": {\\\\n \"setup\": 1,\\\\n \"call\": 2,\\\\n ...\\n \"setup\": 11,\\\\n \"call\": 21,\\\\n \"teardown\": 31,\\\\n \"total\": 63\\\\n }\\\\n}\\', \\'utf-8\\')'\nactual = 'not called.'\nerror_message = 'expected call not found.\\nExpected: write_text(\\'{\\\\n \"test/test_core.py::TestClass::test_case[A]\": {\\\\n \"s...\\n \"call\": 21,\\\\n \"teardown\": 31,\\\\n \"total\": 63\\\\n }\\\\n}\\', \\'utf-8\\')\\n Actual: not called.'\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestLoadSave::test__save_data - AssertionError: expected call not found.\nExpected: write_text('{\\n \"test/test_core.py::TestClass::test_case[A]\": {\\n \"setup\": 1,\\n \"call\": 2,\\n \"teardown\": 3,\\n \"total\": 6\\n },\\n \"test/test_core.py::TestClass::test_case[B]\": {\\n \"setup\": 11,\\n \"call\": 21,\\n \"teardown\": 31,\\n \"total\": 63\\n }\\n}', 'utf-8')\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6865231990814209}, {"mutant": {"mutator_name": "FuncCall", "lineno": 27, "col_offset": 4, "end_lineno": 27, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:27\n@@ -24,7 +24,7 @@\n \"\"\"Clear Saved Data.\"\"\"\n global _sort_data\n _sort_data = {}\n- _save_data()\n+ None\n \n \n def update_test_cases(recorded_times: dict) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestClearDb::test_clear_db FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________________ TestClearDb.test_clear_db ___________________________\n\nself = \nsave_data = \ntest_data = {'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}}\n\n def test_clear_db(self, save_data, test_data):\n database._sort_data = test_data\n database.clear_db()\n assert database._sort_data == {}\n> save_data.assert_called()\n\ntest/test_database.py:87: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected '_save_data' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestClearDb::test_clear_db - AssertionError: Expected '_save_data' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4290800094604492}, {"mutant": {"mutator_name": "FuncCall", "lineno": 32, "col_offset": 4, "end_lineno": 32, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:32\n@@ -29,7 +29,7 @@\n \n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n- _load_data()\n+ None\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n> assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:112: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6031243801116943}, {"mutant": {"mutator_name": "FuncCall", "lineno": 35, "col_offset": 20, "end_lineno": 35, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:35\n@@ -32,7 +32,7 @@\n _load_data()\n \n for nodeid in recorded_times:\n- node_data = _sort_data.get(nodeid, {})\n+ node_data = None\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = None\n \n> node_data[\"setup\"] = node_data.get(\"setup\", 0)\nE AttributeError: 'NoneType' object has no attribute 'get'\n\n.poodle-temp/run-334/src/pytest_sort/database.py:37: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AttributeError: 'NoneType' object has no attribute 'get'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4011392593383789}, {"mutant": {"mutator_name": "FuncCall", "lineno": 37, "col_offset": 29, "end_lineno": 37, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data[\"setup\"] = None\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = None\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n> if node_data[\"setup\"] < setup:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-335/src/pytest_sort/database.py:42: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6160202026367188}, {"mutant": {"mutator_name": "FuncCall", "lineno": 38, "col_offset": 28, "end_lineno": 38, "end_col_offset": 52, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data[\"call\"] = None\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = None\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n> if node_data[\"call\"] < call:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-336/src/pytest_sort/database.py:46: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.397716760635376}, {"mutant": {"mutator_name": "FuncCall", "lineno": 39, "col_offset": 32, "end_lineno": 39, "end_col_offset": 60, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data[\"teardown\"] = None\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = None\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n> if node_data[\"teardown\"] < teardown:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-337/src/pytest_sort/database.py:50: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6276919841766357}, {"mutant": {"mutator_name": "FuncCall", "lineno": 41, "col_offset": 16, "end_lineno": 41, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = None\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = None\n> if node_data[\"setup\"] < setup:\nE TypeError: '<' not supported between instances of 'int' and 'NoneType'\n\n.poodle-temp/run-338/src/pytest_sort/database.py:42: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.43813371658325195}, {"mutant": {"mutator_name": "FuncCall", "lineno": 45, "col_offset": 15, "end_lineno": 45, "end_col_offset": 52, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = None\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = None\n> if node_data[\"call\"] < call:\nE TypeError: '<' not supported between instances of 'int' and 'NoneType'\n\n.poodle-temp/run-339/src/pytest_sort/database.py:46: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6181731224060059}, {"mutant": {"mutator_name": "FuncCall", "lineno": 49, "col_offset": 19, "end_lineno": 49, "end_col_offset": 60, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = None\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = None\n> if node_data[\"teardown\"] < teardown:\nE TypeError: '<' not supported between instances of 'int' and 'NoneType'\n\n.poodle-temp/run-340/src/pytest_sort/database.py:50: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3940401077270508}, {"mutant": {"mutator_name": "FuncCall", "lineno": 57, "col_offset": 4, "end_lineno": 57, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:57\n@@ -54,7 +54,7 @@\n \n _sort_data[nodeid] = node_data\n \n- _save_data()\n+ None\n \n \n def get_all_totals() -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n assert database._sort_data[\"test/test_core.py::TestClass::test_case[A]\"] == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\n> save_data.saved.assert_called_with(database._sort_data)\n\ntest/test_database.py:118: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ({'test/test_core.py::TestClass::test_case[A]': {'call': 2, 'setup': 1, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'call': 21, 'setup': 11, 'teardown': 31, 'total': 63}},)\nkwargs = {}\nexpected = \"saved({'test/test_core.py::TestClass::test_case[A]': {'setup': 1, 'call': 2, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'setup': 11, 'call': 21, 'teardown': 31, 'total': 63}})\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: saved({'test/test_core.py::TestClass::test_case[A]': {'setup': 1, 'call': 2, 'tea...est_core.py::TestClass::test_case[B]': {'setup': 11, 'call': 21, 'teardown': 31, 'total': 63}})\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: saved({'test/test_core.py::TestClass::test_case[A]': {'setup': 1, 'call': 2, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'setup': 11, 'call': 21, 'teardown': 31, 'total': 63}})\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AssertionError: expected call not found.\nExpected: saved({'test/test_core.py::TestClass::test_case[A]': {'setup': 1, 'call': 2, 'teardown': 3, 'total': 6}, 'test/test_core.py::TestClass::test_case[B]': {'setup': 11, 'call': 21, 'teardown': 31, 'total': 63}})\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6967644691467285}, {"mutant": {"mutator_name": "FuncCall", "lineno": 62, "col_offset": 4, "end_lineno": 62, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:62\n@@ -59,7 +59,7 @@\n \n def get_all_totals() -> dict:\n \"\"\"Retrieve all total durations for all nodeids.\"\"\"\n- _load_data()\n+ None\n return {nodeid: _sort_data[nodeid][\"total\"] for nodeid in _sort_data}\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_all_totals FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestGet.test_get_all_totals __________________________\n\nself = \n\n def test_get_all_totals(self):\n> assert database.get_all_totals() == {\n \"test/test_core.py::TestClass::test_case[A]\": 6,\n \"test/test_core.py::TestClass::test_case[B]\": 63,\n }\nE AssertionError\n\ntest/test_database.py:204: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_all_totals - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.5699605941772461}, {"mutant": {"mutator_name": "FuncCall", "lineno": 68, "col_offset": 4, "end_lineno": 68, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:68\n@@ -65,7 +65,7 @@\n \n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n- _load_data()\n+ None\n return sum([_sort_data[nodeid][\"total\"] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_bucket_total FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestGet.test_get_bucket_total _________________________\n\nself = \n\n def test_get_bucket_total(self):\n> assert database.get_bucket_total(\"test/test_core.py\") == 69\nE AssertionError\n\ntest/test_database.py:210: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_bucket_total - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3868563175201416}, {"mutant": {"mutator_name": "FuncCall", "lineno": 69, "col_offset": 11, "end_lineno": 69, "end_col_offset": 102, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:69\n@@ -66,7 +66,7 @@\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n- return sum([_sort_data[nodeid][\"total\"] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n+ return None\n \n \n def get_stats(nodeid: str) -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_bucket_total FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestGet.test_get_bucket_total _________________________\n\nself = \n\n def test_get_bucket_total(self):\n> assert database.get_bucket_total(\"test/test_core.py\") == 69\nE AssertionError\n\ntest/test_database.py:210: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_bucket_total - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.600705623626709}, {"mutant": {"mutator_name": "FuncCall", "lineno": 74, "col_offset": 4, "end_lineno": 74, "end_col_offset": 16, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:74\n@@ -71,7 +71,7 @@\n \n def get_stats(nodeid: str) -> dict:\n \"\"\"Retrieve all stats for specified nodeid. (all zeroes if not found).\"\"\"\n- _load_data()\n+ None\n return _sort_data.get(\n nodeid,\n {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________________________ TestGet.test_get_stats ____________________________\n\nself = \n\n def test_get_stats(self):\n> assert database.get_stats(\"test/test_core.py::TestClass::test_case[A]\") == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:216: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6000757217407227}, {"mutant": {"mutator_name": "FuncCall", "lineno": 75, "col_offset": 11, "end_lineno": 83, "end_col_offset": 5, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:75\n@@ -72,12 +72,4 @@\n def get_stats(nodeid: str) -> dict:\n \"\"\"Retrieve all stats for specified nodeid. (all zeroes if not found).\"\"\"\n _load_data()\n- return _sort_data.get(\n- nodeid,\n- {\n- \"setup\": 0,\n- \"call\": 0,\n- \"teardown\": 0,\n- \"total\": 0,\n- },\n- )\n+ return None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________________________ TestGet.test_get_stats ____________________________\n\nself = \n\n def test_get_stats(self):\n> assert database.get_stats(\"test/test_core.py::TestClass::test_case[A]\") == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:216: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.38543248176574707}, {"mutant": {"mutator_name": "DictArray", "lineno": 37, "col_offset": 8, "end_lineno": 37, "end_col_offset": 26, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ None = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-347/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-347/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-347/src/pytest_sort/database.py\", line 37\n None = node_data.get(\"setup\", 0)\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.23247480392456055}, {"mutant": {"mutator_name": "DictArray", "lineno": 38, "col_offset": 8, "end_lineno": 38, "end_col_offset": 25, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ None = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-348/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-348/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-348/src/pytest_sort/database.py\", line 38\n None = node_data.get(\"call\", 0)\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2814750671386719}, {"mutant": {"mutator_name": "DictArray", "lineno": 39, "col_offset": 8, "end_lineno": 39, "end_col_offset": 29, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ None = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-349/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-349/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-349/src/pytest_sort/database.py\", line 39\n None = node_data.get(\"teardown\", 0)\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1900005340576172}, {"mutant": {"mutator_name": "DictArray", "lineno": 41, "col_offset": 16, "end_lineno": 41, "end_col_offset": 38, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = None.get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n> setup = None.get(\"setup\", 0)\nE AttributeError: 'NoneType' object has no attribute 'get'\n\n.poodle-temp/run-350/src/pytest_sort/database.py:41: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AttributeError: 'NoneType' object has no attribute 'get'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6203787326812744}, {"mutant": {"mutator_name": "DictArray", "lineno": 42, "col_offset": 11, "end_lineno": 42, "end_col_offset": 29, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:42\n@@ -39,7 +39,7 @@\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n- if node_data[\"setup\"] < setup:\n+ if None < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n> if None < setup:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-351/src/pytest_sort/database.py:42: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3948960304260254}, {"mutant": {"mutator_name": "DictArray", "lineno": 43, "col_offset": 12, "end_lineno": 43, "end_col_offset": 30, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:43\n@@ -40,7 +40,7 @@\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n- node_data[\"setup\"] = setup\n+ None = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-352/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-352/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-352/src/pytest_sort/database.py\", line 43\n None = setup\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2858278751373291}, {"mutant": {"mutator_name": "DictArray", "lineno": 45, "col_offset": 15, "end_lineno": 45, "end_col_offset": 37, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = None.get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n> call = None.get(\"call\", 0)\nE AttributeError: 'NoneType' object has no attribute 'get'\n\n.poodle-temp/run-353/src/pytest_sort/database.py:45: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AttributeError: 'NoneType' object has no attribute 'get'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6098198890686035}, {"mutant": {"mutator_name": "DictArray", "lineno": 46, "col_offset": 11, "end_lineno": 46, "end_col_offset": 28, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:46\n@@ -43,7 +43,7 @@\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n- if node_data[\"call\"] < call:\n+ if None < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n> if None < call:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-354/src/pytest_sort/database.py:46: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3927021026611328}, {"mutant": {"mutator_name": "DictArray", "lineno": 47, "col_offset": 12, "end_lineno": 47, "end_col_offset": 29, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:47\n@@ -44,7 +44,7 @@\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n- node_data[\"call\"] = call\n+ None = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-355/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-355/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-355/src/pytest_sort/database.py\", line 47\n None = call\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.28818607330322266}, {"mutant": {"mutator_name": "DictArray", "lineno": 49, "col_offset": 19, "end_lineno": 49, "end_col_offset": 41, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = None.get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n> teardown = None.get(\"teardown\", 0)\nE AttributeError: 'NoneType' object has no attribute 'get'\n\n.poodle-temp/run-356/src/pytest_sort/database.py:49: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - AttributeError: 'NoneType' object has no attribute 'get'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.17s ===============================\n\n"}, "duration": 0.4575371742248535}, {"mutant": {"mutator_name": "DictArray", "lineno": 50, "col_offset": 11, "end_lineno": 50, "end_col_offset": 32, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:50\n@@ -47,7 +47,7 @@\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n- if node_data[\"teardown\"] < teardown:\n+ if None < teardown:\n node_data[\"teardown\"] = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n> if None < teardown:\nE TypeError: '<' not supported between instances of 'NoneType' and 'int'\n\n.poodle-temp/run-357/src/pytest_sort/database.py:50: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: '<' not supported between instances of 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.5266811847686768}, {"mutant": {"mutator_name": "DictArray", "lineno": 51, "col_offset": 12, "end_lineno": 51, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:51\n@@ -48,7 +48,7 @@\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n- node_data[\"teardown\"] = teardown\n+ None = teardown\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-358/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-358/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-358/src/pytest_sort/database.py\", line 51\n None = teardown\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.28391599655151367}, {"mutant": {"mutator_name": "DictArray", "lineno": 53, "col_offset": 8, "end_lineno": 53, "end_col_offset": 26, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ None = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-359/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-359/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-359/src/pytest_sort/database.py\", line 53\n None = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.28076791763305664}, {"mutant": {"mutator_name": "DictArray", "lineno": 53, "col_offset": 29, "end_lineno": 53, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = None + node_data[\"call\"] + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = None + node_data[\"call\"] + node_data[\"teardown\"]\nE TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'\n\n.poodle-temp/run-360/src/pytest_sort/database.py:53: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3941969871520996}, {"mutant": {"mutator_name": "DictArray", "lineno": 53, "col_offset": 50, "end_lineno": 53, "end_col_offset": 67, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data[\"setup\"] + None + node_data[\"teardown\"]\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = node_data[\"setup\"] + None + node_data[\"teardown\"]\nE TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n\n.poodle-temp/run-361/src/pytest_sort/database.py:53: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6251723766326904}, {"mutant": {"mutator_name": "DictArray", "lineno": 53, "col_offset": 70, "end_lineno": 53, "end_col_offset": 91, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:53\n@@ -50,7 +50,7 @@\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n- node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n+ node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + None\n \n _sort_data[nodeid] = node_data\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestUpdate.test_update_test_cases_update_less _________________\n\nself = \nsave_data = \n\n def test_update_test_cases_update_less(self, save_data):\n> database.update_test_cases(\n {\n \"test/test_core.py::TestClass::test_case[A]\": {\"setup\": 0, \"call\": 1, \"teardown\": 2},\n }\n )\n\ntest/test_database.py:107: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nrecorded_times = {'test/test_core.py::TestClass::test_case[A]': {'call': 1, 'setup': 0, 'teardown': 2}}\n\n def update_test_cases(recorded_times: dict) -> None:\n \"\"\"Update Test Case Data with specfiied duration(s) and recalculate total(s).\"\"\"\n _load_data()\n \n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n call = recorded_times[nodeid].get(\"call\", 0)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n teardown = recorded_times[nodeid].get(\"teardown\", 0)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n> node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + None\nE TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n\n.poodle-temp/run-362/src/pytest_sort/database.py:53: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestUpdate::test_update_test_cases_update_less - TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6142346858978271}, {"mutant": {"mutator_name": "DictArray", "lineno": 55, "col_offset": 8, "end_lineno": 55, "end_col_offset": 26, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:55\n@@ -52,7 +52,7 @@\n \n node_data[\"total\"] = node_data[\"setup\"] + node_data[\"call\"] + node_data[\"teardown\"]\n \n- _sort_data[nodeid] = node_data\n+ None = node_data\n \n _save_data()\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-363/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-363/src/pytest_sort/config.py\", line 9, in \n from pytest_sort import database\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-363/src/pytest_sort/database.py\", line 55\n None = node_data\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1850268840789795}, {"mutant": {"mutator_name": "DictArray", "lineno": 63, "col_offset": 20, "end_lineno": 63, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:63\n@@ -60,7 +60,7 @@\n def get_all_totals() -> dict:\n \"\"\"Retrieve all total durations for all nodeids.\"\"\"\n _load_data()\n- return {nodeid: _sort_data[nodeid][\"total\"] for nodeid in _sort_data}\n+ return {nodeid: None for nodeid in _sort_data}\n \n \n def get_bucket_total(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_all_totals FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestGet.test_get_all_totals __________________________\n\nself = \n\n def test_get_all_totals(self):\n> assert database.get_all_totals() == {\n \"test/test_core.py::TestClass::test_case[A]\": 6,\n \"test/test_core.py::TestClass::test_case[B]\": 63,\n }\nE AssertionError\n\ntest/test_database.py:204: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_all_totals - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.39116954803466797}, {"mutant": {"mutator_name": "DictArray", "lineno": 69, "col_offset": 16, "end_lineno": 69, "end_col_offset": 43, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:69\n@@ -66,7 +66,7 @@\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n- return sum([_sort_data[nodeid][\"total\"] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n+ return sum([None for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n \n \n def get_stats(nodeid: str) -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_bucket_total FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestGet.test_get_bucket_total _________________________\n\nself = \n\n def test_get_bucket_total(self):\n> assert database.get_bucket_total(\"test/test_core.py\") == 69\n\ntest/test_database.py:210: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nbucket_id = 'test/test_core.py'\n\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n> return sum([None for nodeid in _sort_data if nodeid.startswith(bucket_id)])\nE TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n\n.poodle-temp/run-365/src/pytest_sort/database.py:69: TypeError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_bucket_total - TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6094269752502441}, {"mutant": {"mutator_name": "Return", "lineno": 63, "col_offset": 4, "end_lineno": 63, "end_col_offset": 73, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:63\n@@ -60,7 +60,7 @@\n def get_all_totals() -> dict:\n \"\"\"Retrieve all total durations for all nodeids.\"\"\"\n _load_data()\n- return {nodeid: _sort_data[nodeid][\"total\"] for nodeid in _sort_data}\n+ return None\n \n \n def get_bucket_total(bucket_id: str) -> int:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_all_totals FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________________ TestGet.test_get_all_totals __________________________\n\nself = \n\n def test_get_all_totals(self):\n> assert database.get_all_totals() == {\n \"test/test_core.py::TestClass::test_case[A]\": 6,\n \"test/test_core.py::TestClass::test_case[B]\": 63,\n }\nE AssertionError\n\ntest/test_database.py:204: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_all_totals - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.5603046417236328}, {"mutant": {"mutator_name": "Return", "lineno": 69, "col_offset": 4, "end_lineno": 69, "end_col_offset": 102, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:69\n@@ -66,7 +66,7 @@\n def get_bucket_total(bucket_id: str) -> int:\n \"\"\"Retrieve the total for all test nodeid that start with bucket_id. (0 if not found).\"\"\"\n _load_data()\n- return sum([_sort_data[nodeid][\"total\"] for nodeid in _sort_data if nodeid.startswith(bucket_id)])\n+ return None\n \n \n def get_stats(nodeid: str) -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_bucket_total FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________________ TestGet.test_get_bucket_total _________________________\n\nself = \n\n def test_get_bucket_total(self):\n> assert database.get_bucket_total(\"test/test_core.py\") == 69\nE AssertionError\n\ntest/test_database.py:210: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_bucket_total - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.40512943267822266}, {"mutant": {"mutator_name": "Return", "lineno": 75, "col_offset": 4, "end_lineno": 83, "end_col_offset": 5, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/database.py:75\n@@ -72,12 +72,4 @@\n def get_stats(nodeid: str) -> dict:\n \"\"\"Retrieve all stats for specified nodeid. (all zeroes if not found).\"\"\"\n _load_data()\n- return _sort_data.get(\n- nodeid,\n- {\n- \"setup\": 0,\n- \"call\": 0,\n- \"teardown\": 0,\n- \"total\": 0,\n- },\n- )\n+ return None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_database.py::TestGet::test_get_stats FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________________________ TestGet.test_get_stats ____________________________\n\nself = \n\n def test_get_stats(self):\n> assert database.get_stats(\"test/test_core.py::TestClass::test_case[A]\") == {\n \"setup\": 1,\n \"call\": 2,\n \"teardown\": 3,\n \"total\": 6,\n }\nE AssertionError\n\ntest/test_database.py:216: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_database.py::TestGet::test_get_stats - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4052722454071045}, {"mutant": {"mutator_name": "BinOp", "lineno": 105, "col_offset": 23, "end_lineno": 105, "end_col_offset": 52, "text": "call.duration / 1000000000", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:105\n@@ -102,7 +102,7 @@\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n- duration = int(call.duration * 1_000_000_000) # convert to ns\n+ duration = int(call.duration / 1000000000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'setup': 0}}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6178145408630371}, {"mutant": {"mutator_name": "BinOp", "lineno": 105, "col_offset": 23, "end_lineno": 105, "end_col_offset": 52, "text": "call.duration + 1000000000", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:105\n@@ -102,7 +102,7 @@\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n- duration = int(call.duration * 1_000_000_000) # convert to ns\n+ duration = int(call.duration + 1000000000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'setup': 1000000001}}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6058800220489502}, {"mutant": {"mutator_name": "AugAssign", "lineno": 84, "col_offset": 8, "end_lineno": 84, "end_col_offset": 39, "text": "header = f'\\n {key}: {value}'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:84\n@@ -81,7 +81,7 @@\n header = \"pytest-sort:\"\n \n for key, value in SortConfig.header_dict().items():\n- header += f\"\\n {key}: {value}\"\n+ header = f'\\n {key}: {value}'\n \n return header\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\n\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_report_header FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestConfig.test_pytest_report_header _____________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_report_header(self, SortConfig):\n config = mock.MagicMock()\n SortConfig.header_dict.return_value = {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n }\n \n header = plugin.pytest_report_header(config)\n \n> assert header == \"pytest-sort:\\n sort-mode: random\\n sort-bucket: module\"\nE AssertionError\n\ntest/test_plugin.py:111: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_report_header - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3912789821624756}, {"mutant": {"mutator_name": "AugAssign", "lineno": 84, "col_offset": 8, "end_lineno": 84, "end_col_offset": 39, "text": "header -= f'\\n {key}: {value}'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:84\n@@ -81,7 +81,7 @@\n header = \"pytest-sort:\"\n \n for key, value in SortConfig.header_dict().items():\n- header += f\"\\n {key}: {value}\"\n+ header -= f'\\n {key}: {value}'\n \n return header\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 269, in wrap_session\nINTERNALERROR> config.hook.pytest_sessionstart(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/terminal.py\", line 771, in pytest_sessionstart\nINTERNALERROR> lines = self.config.hook.pytest_report_header(\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/compat.py\", line 66, in fixed_hook\nINTERNALERROR> return hook(**kw)\nINTERNALERROR> ^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-372/src/pytest_sort/plugin.py\", line 84, in pytest_report_header\nINTERNALERROR> header -= f'\\n {key}: {value}'\nINTERNALERROR> TypeError: unsupported operand type(s) for -=: 'str' and 'str'\n\n"}, "duration": 0.37697386741638184}, {"mutant": {"mutator_name": "AugAssign", "lineno": 84, "col_offset": 8, "end_lineno": 84, "end_col_offset": 39, "text": "header *= f'\\n {key}: {value}'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:84\n@@ -81,7 +81,7 @@\n header = \"pytest-sort:\"\n \n for key, value in SortConfig.header_dict().items():\n- header += f\"\\n {key}: {value}\"\n+ header *= f'\\n {key}: {value}'\n \n return header\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 269, in wrap_session\nINTERNALERROR> config.hook.pytest_sessionstart(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/terminal.py\", line 771, in pytest_sessionstart\nINTERNALERROR> lines = self.config.hook.pytest_report_header(\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/compat.py\", line 66, in fixed_hook\nINTERNALERROR> return hook(**kw)\nINTERNALERROR> ^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-373/src/pytest_sort/plugin.py\", line 84, in pytest_report_header\nINTERNALERROR> header *= f'\\n {key}: {value}'\nINTERNALERROR> TypeError: can't multiply sequence by non-int of type 'str'\n\n"}, "duration": 0.3705310821533203}, {"mutant": {"mutator_name": "Compare", "lineno": 104, "col_offset": 7, "end_lineno": 104, "end_col_offset": 71, "text": "SortConfig.record or call.when in ('setup', 'call', 'teardown')", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:104\n@@ -101,7 +101,7 @@\n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n- if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n+ if SortConfig.record or call.when in ('setup', 'call', 'teardown'):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_configure PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_report_header PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1] PASSED [ 96%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times2-teardown-out_recorded_times2] PASSED [ 97%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times3-collect-out_recorded_times3] FAILED [ 97%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times3-collect-out_recorded_times3] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'collect': 1123456789}}, when = 'collect'\nout_recorded_times = {}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times3-collect-out_recorded_times3] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 168 passed in 0.79s =========================\n\n"}, "duration": 1.0349609851837158}, {"mutant": {"mutator_name": "Compare", "lineno": 107, "col_offset": 11, "end_lineno": 107, "end_col_offset": 55, "text": "item.nodeid in SortConfig.recorded_times", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:107\n@@ -104,7 +104,7 @@\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n- if item.nodeid not in SortConfig.recorded_times:\n+ if item.nodeid in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n \n SortConfig.recorded_times[item.nodeid][call.when] = duration\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n> for i in plugin.pytest_runtest_makereport(item, call):\n\ntest/test_plugin.py:162: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nitem = , call = \n\n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n \n> SortConfig.recorded_times[item.nodeid][call.when] = duration\nE KeyError: 'test_item_1'\n\n.poodle-temp/run-375/src/pytest_sort/plugin.py:110: KeyError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - KeyError: 'test_item_1'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6220388412475586}, {"mutant": {"mutator_name": "Number", "lineno": 105, "col_offset": 39, "end_lineno": 105, "end_col_offset": 52, "text": "1000000001", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:105\n@@ -102,7 +102,7 @@\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n- duration = int(call.duration * 1_000_000_000) # convert to ns\n+ duration = int(call.duration * 1000000001) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'setup': 1123456790}}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6109042167663574}, {"mutant": {"mutator_name": "Number", "lineno": 105, "col_offset": 39, "end_lineno": 105, "end_col_offset": 52, "text": "999999999", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:105\n@@ -102,7 +102,7 @@\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n- duration = int(call.duration * 1_000_000_000) # convert to ns\n+ duration = int(call.duration * 999999999) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'setup': 1123456787}}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6156923770904541}, {"mutant": {"mutator_name": "String", "lineno": 20, "col_offset": 28, "end_lineno": 20, "end_col_offset": 41, "text": "'XXpytest-sortXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:20\n@@ -17,7 +17,7 @@\n \n def pytest_addoption(parser: pytest.Parser) -> None:\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n- group = parser.getgroup(\"pytest-sort\")\n+ group = parser.getgroup('XXpytest-sortXX')\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n> parser.getgroup.assert_called_with(\"pytest-sort\")\n\ntest/test_plugin.py:22: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('pytest-sort',), kwargs = {}, expected = call('pytest-sort')\nactual = call('XXpytest-sortXX')\n_error_message = ._error_message at 0x7fb78623b6a0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: getgroup('pytest-sort')\nE Actual: getgroup('XXpytest-sortXX')\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: expected call not found.\nExpected: getgroup('pytest-sort')\n Actual: getgroup('XXpytest-sortXX')\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.6484458446502686}, {"mutant": {"mutator_name": "String", "lineno": 22, "col_offset": 20, "end_lineno": 22, "end_col_offset": 33, "text": "'XX--sort-modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:22\n@@ -19,7 +19,7 @@\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n group = parser.getgroup(\"pytest-sort\")\n \n- group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n+ group.addoption('XX--sort-modeXX', action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-379/src/pytest_sort/plugin.py\", line 22, in pytest_addoption\n group.addoption('XX--sort-modeXX', action=\"store\", dest=\"sort_mode\", help=str(modes))\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.2249000072479248}, {"mutant": {"mutator_name": "String", "lineno": 22, "col_offset": 42, "end_lineno": 22, "end_col_offset": 49, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:22\n@@ -19,7 +19,7 @@\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n group = parser.getgroup(\"pytest-sort\")\n \n- group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n+ group.addoption(\"--sort-mode\", action='XXstoreXX', dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.2918050289154053}, {"mutant": {"mutator_name": "String", "lineno": 22, "col_offset": 56, "end_lineno": 22, "end_col_offset": 67, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:22\n@@ -19,7 +19,7 @@\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n group = parser.getgroup(\"pytest-sort\")\n \n- group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n+ group.addoption(\"--sort-mode\", action=\"store\", dest='XXsort_modeXX', help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: ordered\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 93%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n> group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n\ntest/test_plugin.py:24: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-mode',)\nkwargs = {'action': 'store', 'dest': 'sort_mode', 'help': \"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='XXsort_modeXX', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'd... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = 'addoption(\\'--sort-mode\\', action=\\'store\\', dest=\\'sort_mode\\', help=\"[\\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 160 passed in 0.77s =========================\n\n"}, "duration": 1.033440113067627}, {"mutant": {"mutator_name": "String", "lineno": 23, "col_offset": 20, "end_lineno": 23, "end_col_offset": 33, "text": "'XX--sort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:23\n@@ -20,7 +20,7 @@\n group = parser.getgroup(\"pytest-sort\")\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n- group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_modeXX', action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-382/src/pytest_sort/plugin.py\", line 23, in pytest_addoption\n group.addoption('XX--sort_modeXX', action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3413674831390381}, {"mutant": {"mutator_name": "String", "lineno": 23, "col_offset": 42, "end_lineno": 23, "end_col_offset": 49, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:23\n@@ -20,7 +20,7 @@\n group = parser.getgroup(\"pytest-sort\")\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n- group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_mode\", action='XXstoreXX', dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.3409416675567627}, {"mutant": {"mutator_name": "String", "lineno": 23, "col_offset": 56, "end_lineno": 23, "end_col_offset": 67, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:23\n@@ -20,7 +20,7 @@\n group = parser.getgroup(\"pytest-sort\")\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n- group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_mode\", action=\"store\", dest='XXsort_modeXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n> group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:25: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_mode',)\nkwargs = {'action': 'store', 'dest': 'sort_mode', 'help': '==SUPPRESS=='}\nexpected = call('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6902430057525635}, {"mutant": {"mutator_name": "String", "lineno": 24, "col_offset": 18, "end_lineno": 24, "end_col_offset": 29, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:24\n@@ -21,7 +21,7 @@\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_mode\", help=str(modes))\n+ parser.addini('XXsort_modeXX', help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n> parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n\ntest/test_plugin.py:26: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('sort_mode',)\nkwargs = {'help': \"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('XXsort_modeXX', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"), call('sort_buc...de=fastest', type='bool'), call('sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')]\nexpected_string = 'addini(\\'sort_mode\\', help=\"[\\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addini('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addini('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6866707801818848}, {"mutant": {"mutator_name": "String", "lineno": 26, "col_offset": 20, "end_lineno": 26, "end_col_offset": 35, "text": "'XX--sort-bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:26\n@@ -23,7 +23,7 @@\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n- group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n+ group.addoption('XX--sort-bucketXX', action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-386/src/pytest_sort/plugin.py\", line 26, in pytest_addoption\n group.addoption('XX--sort-bucketXX', action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.2847938537597656}, {"mutant": {"mutator_name": "String", "lineno": 26, "col_offset": 44, "end_lineno": 26, "end_col_offset": 51, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:26\n@@ -23,7 +23,7 @@\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n- group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n+ group.addoption(\"--sort-bucket\", action='XXstoreXX', dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.26265788078308105}, {"mutant": {"mutator_name": "String", "lineno": 26, "col_offset": 58, "end_lineno": 26, "end_col_offset": 71, "text": "'XXsort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:26\n@@ -23,7 +23,7 @@\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n- group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n+ group.addoption(\"--sort-bucket\", action=\"store\", dest='XXsort_bucketXX', help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n> group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n\ntest/test_plugin.py:28: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket', 'help': \"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\"}\nexpected = call('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = 'addoption(\\'--sort-bucket\\', action=\\'store\\', dest=\\'sort_bucket\\', help=\"[\\'session\\', \\'package\\', \\'module\\', \\'class\\', \\'function\\', \\'parent\\', \\'grandparent\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.5171434879302979}, {"mutant": {"mutator_name": "String", "lineno": 27, "col_offset": 20, "end_lineno": 27, "end_col_offset": 35, "text": "'XX--sort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:27\n@@ -24,7 +24,7 @@\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n- group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_bucketXX', action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-389/src/pytest_sort/plugin.py\", line 27, in pytest_addoption\n group.addoption('XX--sort_bucketXX', action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.32854795455932617}, {"mutant": {"mutator_name": "String", "lineno": 27, "col_offset": 44, "end_lineno": 27, "end_col_offset": 51, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:27\n@@ -24,7 +24,7 @@\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n- group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_bucket\", action='XXstoreXX', dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.34348273277282715}, {"mutant": {"mutator_name": "String", "lineno": 27, "col_offset": 58, "end_lineno": 27, "end_col_offset": 71, "text": "'XXsort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:27\n@@ -24,7 +24,7 @@\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n- group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_bucket\", action=\"store\", dest='XXsort_bucketXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n> group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_bucket',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket', 'help': '==SUPPRESS=='}\nexpected = call('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6575777530670166}, {"mutant": {"mutator_name": "String", "lineno": 28, "col_offset": 18, "end_lineno": 28, "end_col_offset": 31, "text": "'XXsort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:28\n@@ -25,7 +25,7 @@\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_bucket\", help=str(bucket_types))\n+ parser.addini('XXsort_bucketXX', help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-392/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-392/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-392/src/pytest_sort/config.py\", line 74, in _bucket_from_pytest\nINTERNALERROR> SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_bucket'\n"}, "duration": 0.24774646759033203}, {"mutant": {"mutator_name": "String", "lineno": 30, "col_offset": 15, "end_lineno": 30, "end_col_offset": 26, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:30\n@@ -27,7 +27,7 @@\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n- choices = [\"sort_mode\"]\n+ choices = ['XXsort_modeXX']\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n> group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n\ntest/test_plugin.py:34: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket-mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': \"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = 'addoption(\\'--sort-bucket-mode\\', action=\\'store\\', dest=\\'sort_bucket_mode\\', help=\"[\\'sort_mode\\', \\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6854863166809082}, {"mutant": {"mutator_name": "String", "lineno": 32, "col_offset": 20, "end_lineno": 32, "end_col_offset": 40, "text": "'XX--sort-bucket-modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:32\n@@ -29,7 +29,7 @@\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n- group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n+ group.addoption('XX--sort-bucket-modeXX', action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-394/src/pytest_sort/plugin.py\", line 32, in pytest_addoption\n group.addoption('XX--sort-bucket-modeXX', action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.22496986389160156}, {"mutant": {"mutator_name": "String", "lineno": 32, "col_offset": 49, "end_lineno": 32, "end_col_offset": 56, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:32\n@@ -29,7 +29,7 @@\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n- group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n+ group.addoption(\"--sort-bucket-mode\", action='XXstoreXX', dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.23110270500183105}, {"mutant": {"mutator_name": "String", "lineno": 32, "col_offset": 63, "end_lineno": 32, "end_col_offset": 81, "text": "'XXsort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:32\n@@ -29,7 +29,7 @@\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n- group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n+ group.addoption(\"--sort-bucket-mode\", action=\"store\", dest='XXsort_bucket_modeXX', help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n> group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n\ntest/test_plugin.py:34: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket-mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': \"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = 'addoption(\\'--sort-bucket-mode\\', action=\\'store\\', dest=\\'sort_bucket_mode\\', help=\"[\\'sort_mode\\', \\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5518841743469238}, {"mutant": {"mutator_name": "String", "lineno": 33, "col_offset": 20, "end_lineno": 33, "end_col_offset": 40, "text": "'XX--sort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:33\n@@ -30,7 +30,7 @@\n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n- group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_bucket_modeXX', action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-397/src/pytest_sort/plugin.py\", line 33, in pytest_addoption\n group.addoption('XX--sort_bucket_modeXX', action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.2697296142578125}, {"mutant": {"mutator_name": "String", "lineno": 33, "col_offset": 49, "end_lineno": 33, "end_col_offset": 56, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:33\n@@ -30,7 +30,7 @@\n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n- group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_bucket_mode\", action='XXstoreXX', dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.3468594551086426}, {"mutant": {"mutator_name": "String", "lineno": 33, "col_offset": 63, "end_lineno": 33, "end_col_offset": 81, "text": "'XXsort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:33\n@@ -30,7 +30,7 @@\n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n- group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_bucket_mode\", action=\"store\", dest='XXsort_bucket_modeXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n> group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:37: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_bucket_mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': '==SUPPRESS=='}\nexpected = call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc...ffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='XXsort_bucket_modeXX', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6358053684234619}, {"mutant": {"mutator_name": "String", "lineno": 34, "col_offset": 18, "end_lineno": 34, "end_col_offset": 36, "text": "'XXsort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:34\n@@ -31,7 +31,7 @@\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_bucket_mode\", help=str(choices))\n+ parser.addini('XXsort_bucket_modeXX', help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket_mode'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket_mode'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-400/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-400/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-400/src/pytest_sort/config.py\", line 83, in _bucket_mode_from_pytest\nINTERNALERROR> config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_bucket_mode'\n"}, "duration": 0.35251903533935547}, {"mutant": {"mutator_name": "String", "lineno": 36, "col_offset": 16, "end_lineno": 36, "end_col_offset": 54, "text": "'XXRandom Seed to use with random mode.XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:36\n@@ -33,7 +33,7 @@\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n- help_text = \"Random Seed to use with random mode.\"\n+ help_text = 'XXRandom Seed to use with random mode.XX'\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n> group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n\ntest/test_plugin.py:43: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-seed',)\nkwargs = {'action': 'store', 'dest': 'sort_seed', 'help': 'Random Seed to use with random mode.'}\nexpected = call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4279017448425293}, {"mutant": {"mutator_name": "String", "lineno": 37, "col_offset": 20, "end_lineno": 37, "end_col_offset": 33, "text": "'XX--sort-seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:37\n@@ -34,7 +34,7 @@\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n- group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n+ group.addoption('XX--sort-seedXX', action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-402/src/pytest_sort/plugin.py\", line 37, in pytest_addoption\n group.addoption('XX--sort-seedXX', action=\"store\", dest=\"sort_seed\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3334465026855469}, {"mutant": {"mutator_name": "String", "lineno": 37, "col_offset": 42, "end_lineno": 37, "end_col_offset": 49, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:37\n@@ -34,7 +34,7 @@\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n- group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n+ group.addoption(\"--sort-seed\", action='XXstoreXX', dest=\"sort_seed\", help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.23247981071472168}, {"mutant": {"mutator_name": "String", "lineno": 37, "col_offset": 56, "end_lineno": 37, "end_col_offset": 67, "text": "'XXsort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:37\n@@ -34,7 +34,7 @@\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n- group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n+ group.addoption(\"--sort-seed\", action=\"store\", dest='XXsort_seedXX', help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n> group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n\ntest/test_plugin.py:43: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-seed',)\nkwargs = {'action': 'store', 'dest': 'sort_seed', 'help': 'Random Seed to use with random mode.'}\nexpected = call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6864328384399414}, {"mutant": {"mutator_name": "String", "lineno": 38, "col_offset": 20, "end_lineno": 38, "end_col_offset": 33, "text": "'XX--sort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:38\n@@ -35,7 +35,7 @@\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n- group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_seedXX', action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-405/src/pytest_sort/plugin.py\", line 38, in pytest_addoption\n group.addoption('XX--sort_seedXX', action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.34474897384643555}, {"mutant": {"mutator_name": "String", "lineno": 38, "col_offset": 42, "end_lineno": 38, "end_col_offset": 49, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:38\n@@ -35,7 +35,7 @@\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n- group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_seed\", action='XXstoreXX', dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.22537994384765625}, {"mutant": {"mutator_name": "String", "lineno": 38, "col_offset": 56, "end_lineno": 38, "end_col_offset": 67, "text": "'XXsort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:38\n@@ -35,7 +35,7 @@\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n- group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_seed\", action=\"store\", dest='XXsort_seedXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n> group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:44: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_seed',)\nkwargs = {'action': 'store', 'dest': 'sort_seed', 'help': '==SUPPRESS=='}\nexpected = call('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.43010783195495605}, {"mutant": {"mutator_name": "String", "lineno": 39, "col_offset": 18, "end_lineno": 39, "end_col_offset": 29, "text": "'XXsort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:39\n@@ -36,7 +36,7 @@\n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_seed\", help=help_text)\n+ parser.addini('XXsort_seedXX', help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_seed'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_seed'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-408/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-408/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-408/src/pytest_sort/config.py\", line 109, in _seed_from_pytest\nINTERNALERROR> SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_seed'\n"}, "duration": 0.3469045162200928}, {"mutant": {"mutator_name": "String", "lineno": 41, "col_offset": 16, "end_lineno": 41, "end_col_offset": 79, "text": "'XXRecords runtimes. Activated by default when sort-mode=fastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:41\n@@ -38,7 +38,7 @@\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n- help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n+ help_text = 'XXRecords runtimes. Activated by default when sort-mode=fastestXX'\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n> group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n\ntest/test_plugin.py:48: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-record-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_record', 'help': 'Records runtimes. Activated by default when sort-mode=fastest'}\nexpected = call('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.643671989440918}, {"mutant": {"mutator_name": "String", "lineno": 42, "col_offset": 20, "end_lineno": 42, "end_col_offset": 41, "text": "'XX--sort-record-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:42\n@@ -39,7 +39,7 @@\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n- group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n+ group.addoption('XX--sort-record-timesXX', action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-410/src/pytest_sort/plugin.py\", line 42, in pytest_addoption\n group.addoption('XX--sort-record-timesXX', action=\"store_true\", dest=\"sort_record\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.34607982635498047}, {"mutant": {"mutator_name": "String", "lineno": 42, "col_offset": 50, "end_lineno": 42, "end_col_offset": 62, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:42\n@@ -39,7 +39,7 @@\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n- group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n+ group.addoption(\"--sort-record-times\", action='XXstore_trueXX', dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.22589826583862305}, {"mutant": {"mutator_name": "String", "lineno": 42, "col_offset": 69, "end_lineno": 42, "end_col_offset": 82, "text": "'XXsort_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:42\n@@ -39,7 +39,7 @@\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n- group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n+ group.addoption(\"--sort-record-times\", action=\"store_true\", dest='XXsort_recordXX', help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n> group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n\ntest/test_plugin.py:48: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-record-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_record', 'help': 'Records runtimes. Activated by default when sort-mode=fastest'}\nexpected = call('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6418261528015137}, {"mutant": {"mutator_name": "String", "lineno": 43, "col_offset": 20, "end_lineno": 43, "end_col_offset": 41, "text": "'XX--sort_record_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:43\n@@ -40,7 +40,7 @@\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n- group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_record_timesXX', action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-413/src/pytest_sort/plugin.py\", line 43, in pytest_addoption\n group.addoption('XX--sort_record_timesXX', action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.24686312675476074}, {"mutant": {"mutator_name": "String", "lineno": 43, "col_offset": 50, "end_lineno": 43, "end_col_offset": 62, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:43\n@@ -40,7 +40,7 @@\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n- group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_record_times\", action='XXstore_trueXX', dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.34079575538635254}, {"mutant": {"mutator_name": "String", "lineno": 43, "col_offset": 69, "end_lineno": 43, "end_col_offset": 82, "text": "'XXsort_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:43\n@@ -40,7 +40,7 @@\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n- group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_record_times\", action=\"store_true\", dest='XXsort_recordXX', help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n> group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:49: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_record_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_record', 'help': '==SUPPRESS=='}\nexpected = call('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.42763447761535645}, {"mutant": {"mutator_name": "String", "lineno": 44, "col_offset": 20, "end_lineno": 44, "end_col_offset": 44, "text": "'XX--sort-no-record-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:44\n@@ -41,7 +41,7 @@\n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n+ group.addoption('XX--sort-no-record-timesXX', action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-416/src/pytest_sort/plugin.py\", line 44, in pytest_addoption\n group.addoption('XX--sort-no-record-timesXX', action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3368096351623535}, {"mutant": {"mutator_name": "String", "lineno": 44, "col_offset": 53, "end_lineno": 44, "end_col_offset": 65, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:44\n@@ -41,7 +41,7 @@\n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n+ group.addoption(\"--sort-no-record-times\", action='XXstore_trueXX', dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.3427915573120117}, {"mutant": {"mutator_name": "String", "lineno": 44, "col_offset": 72, "end_lineno": 44, "end_col_offset": 88, "text": "'XXsort_no_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:44\n@@ -41,7 +41,7 @@\n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n+ group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest='XXsort_no_recordXX', help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n> group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n\ntest/test_plugin.py:52: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-no-record-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_no_record', 'help': 'Records runtimes. Activated by default when sort-mode=fastest'}\nexpected = call('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.5828762054443359}, {"mutant": {"mutator_name": "String", "lineno": 45, "col_offset": 20, "end_lineno": 45, "end_col_offset": 44, "text": "'XX--sort_no_record_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:45\n@@ -42,7 +42,7 @@\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n- group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_no_record_timesXX', action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-419/src/pytest_sort/plugin.py\", line 45, in pytest_addoption\n group.addoption('XX--sort_no_record_timesXX', action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.24958014488220215}, {"mutant": {"mutator_name": "String", "lineno": 45, "col_offset": 53, "end_lineno": 45, "end_col_offset": 65, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:45\n@@ -42,7 +42,7 @@\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n- group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_no_record_times\", action='XXstore_trueXX', dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.3411259651184082}, {"mutant": {"mutator_name": "String", "lineno": 45, "col_offset": 72, "end_lineno": 45, "end_col_offset": 88, "text": "'XXsort_no_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:45\n@@ -42,7 +42,7 @@\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n- group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest='XXsort_no_recordXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:55: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_no_record_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_no_record', 'help': '==SUPPRESS=='}\nexpected = call('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.42999792098999023}, {"mutant": {"mutator_name": "String", "lineno": 46, "col_offset": 18, "end_lineno": 46, "end_col_offset": 37, "text": "'XXsort_record_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:46\n@@ -43,7 +43,7 @@\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n+ parser.addini('XXsort_record_timesXX', help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_record_times'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_record_times'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-422/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-422/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-422/src/pytest_sort/config.py\", line 100, in _record_from_pytest\nINTERNALERROR> SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_record_times'\n"}, "duration": 0.3543894290924072}, {"mutant": {"mutator_name": "String", "lineno": 46, "col_offset": 60, "end_lineno": 46, "end_col_offset": 66, "text": "'XXboolXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:46\n@@ -43,7 +43,7 @@\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n+ parser.addini(\"sort_record_times\", help=help_text, type='XXboolXX')\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-423/src/pytest_sort/plugin.py\", line 46, in pytest_addoption\n parser.addini(\"sort_record_times\", help=help_text, type='XXboolXX')\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 208, in addini\n assert type in (None, \"string\", \"paths\", \"pathlist\", \"args\", \"linelist\", \"bool\")\nAssertionError\n"}, "duration": 0.33812832832336426}, {"mutant": {"mutator_name": "String", "lineno": 48, "col_offset": 16, "end_lineno": 48, "end_col_offset": 61, "text": "'XXClear the recorded runtimes before sorting.XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:48\n@@ -45,7 +45,7 @@\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n- help_text = \"Clear the recorded runtimes before sorting.\"\n+ help_text = 'XXClear the recorded runtimes before sorting.XX'\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n> group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n\ntest/test_plugin.py:61: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-reset-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_reset_times', 'help': 'Clear the recorded runtimes before sorting.'}\nexpected = call('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.5624861717224121}, {"mutant": {"mutator_name": "String", "lineno": 49, "col_offset": 20, "end_lineno": 49, "end_col_offset": 40, "text": "'XX--sort-reset-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:49\n@@ -46,7 +46,7 @@\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n- group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n+ group.addoption('XX--sort-reset-timesXX', action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-425/src/pytest_sort/plugin.py\", line 49, in pytest_addoption\n group.addoption('XX--sort-reset-timesXX', action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3427083492279053}, {"mutant": {"mutator_name": "String", "lineno": 49, "col_offset": 49, "end_lineno": 49, "end_col_offset": 61, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:49\n@@ -46,7 +46,7 @@\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n- group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n+ group.addoption(\"--sort-reset-times\", action='XXstore_trueXX', dest=\"sort_reset_times\", help=help_text)\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.22525358200073242}, {"mutant": {"mutator_name": "String", "lineno": 49, "col_offset": 68, "end_lineno": 49, "end_col_offset": 86, "text": "'XXsort_reset_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:49\n@@ -46,7 +46,7 @@\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n- group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n+ group.addoption(\"--sort-reset-times\", action=\"store_true\", dest='XXsort_reset_timesXX', help=help_text)\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n> group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n\ntest/test_plugin.py:61: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-reset-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_reset_times', 'help': 'Clear the recorded runtimes before sorting.'}\nexpected = call('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5795130729675293}, {"mutant": {"mutator_name": "String", "lineno": 50, "col_offset": 20, "end_lineno": 50, "end_col_offset": 40, "text": "'XX--sort_reset_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:50\n@@ -47,7 +47,7 @@\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n- group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_reset_timesXX', action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-428/src/pytest_sort/plugin.py\", line 50, in pytest_addoption\n group.addoption('XX--sort_reset_timesXX', action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3473954200744629}, {"mutant": {"mutator_name": "String", "lineno": 50, "col_offset": 49, "end_lineno": 50, "end_col_offset": 61, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:50\n@@ -47,7 +47,7 @@\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n- group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_reset_times\", action='XXstore_trueXX', dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.2504727840423584}, {"mutant": {"mutator_name": "String", "lineno": 50, "col_offset": 68, "end_lineno": 50, "end_col_offset": 86, "text": "'XXsort_reset_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:50\n@@ -47,7 +47,7 @@\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n- group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_reset_times\", action=\"store_true\", dest='XXsort_reset_timesXX', help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:64: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_reset_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_reset_times', 'help': '==SUPPRESS=='}\nexpected = call('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6836292743682861}, {"mutant": {"mutator_name": "String", "lineno": 52, "col_offset": 16, "end_lineno": 52, "end_col_offset": 49, "text": "'XXAt end of report current times.XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:52\n@@ -49,7 +49,7 @@\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n- help_text = \"At end of report current times.\"\n+ help_text = 'XXAt end of report current times.XX'\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n> group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n\ntest/test_plugin.py:69: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-report-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_report_times', 'help': 'At end of report current times.'}\nexpected = call('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4278545379638672}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 20, "end_lineno": 53, "end_col_offset": 41, "text": "'XX--sort-report-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:53\n@@ -50,7 +50,7 @@\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n- group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n+ group.addoption('XX--sort-report-timesXX', action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-432/src/pytest_sort/plugin.py\", line 53, in pytest_addoption\n group.addoption('XX--sort-report-timesXX', action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3417093753814697}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 50, "end_lineno": 53, "end_col_offset": 62, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:53\n@@ -50,7 +50,7 @@\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n- group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n+ group.addoption(\"--sort-report-times\", action='XXstore_trueXX', dest=\"sort_report_times\", help=help_text)\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.23207926750183105}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 69, "end_lineno": 53, "end_col_offset": 88, "text": "'XXsort_report_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:53\n@@ -50,7 +50,7 @@\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n- group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n+ group.addoption(\"--sort-report-times\", action=\"store_true\", dest='XXsort_report_timesXX', help=help_text)\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n> group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n\ntest/test_plugin.py:69: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-report-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_report_times', 'help': 'At end of report current times.'}\nexpected = call('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.49612927436828613}, {"mutant": {"mutator_name": "String", "lineno": 54, "col_offset": 20, "end_lineno": 54, "end_col_offset": 41, "text": "'XX--sort_report_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:54\n@@ -51,7 +51,7 @@\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n- group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_report_timesXX', action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-435/src/pytest_sort/plugin.py\", line 54, in pytest_addoption\n group.addoption('XX--sort_report_timesXX', action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.34420347213745117}, {"mutant": {"mutator_name": "String", "lineno": 54, "col_offset": 50, "end_lineno": 54, "end_col_offset": 62, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:54\n@@ -51,7 +51,7 @@\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n- group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_report_times\", action='XXstore_trueXX', dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.3271341323852539}, {"mutant": {"mutator_name": "String", "lineno": 54, "col_offset": 69, "end_lineno": 54, "end_col_offset": 88, "text": "'XXsort_report_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:54\n@@ -51,7 +51,7 @@\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n- group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_report_times\", action=\"store_true\", dest='XXsort_report_timesXX', help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:72: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_report_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_report_times', 'help': '==SUPPRESS=='}\nexpected = call('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6909387111663818}, {"mutant": {"mutator_name": "String", "lineno": 56, "col_offset": 16, "end_lineno": 56, "end_col_offset": 79, "text": "'XXLocation to store pytest-sort data. (default: ./.pytest_sort)XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:56\n@@ -53,7 +53,7 @@\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n- help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n+ help_text = 'XXLocation to store pytest-sort data. (default: ./.pytest_sort)XX'\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n> group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n\ntest/test_plugin.py:77: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-datafile',)\nkwargs = {'action': 'store', 'dest': 'sort_datafile', 'help': 'Location to store pytest-sort data. (default: ./.pytest_sort)'}\nexpected = call('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.43077802658081055}, {"mutant": {"mutator_name": "String", "lineno": 57, "col_offset": 20, "end_lineno": 57, "end_col_offset": 37, "text": "'XX--sort-datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:57\n@@ -54,7 +54,7 @@\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n- group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n+ group.addoption('XX--sort-datafileXX', action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-439/src/pytest_sort/plugin.py\", line 57, in pytest_addoption\n group.addoption('XX--sort-datafileXX', action=\"store\", dest=\"sort_datafile\", help=help_text)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.34401988983154297}, {"mutant": {"mutator_name": "String", "lineno": 57, "col_offset": 46, "end_lineno": 57, "end_col_offset": 53, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:57\n@@ -54,7 +54,7 @@\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n- group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n+ group.addoption(\"--sort-datafile\", action='XXstoreXX', dest=\"sort_datafile\", help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.3191397190093994}, {"mutant": {"mutator_name": "String", "lineno": 57, "col_offset": 60, "end_lineno": 57, "end_col_offset": 75, "text": "'XXsort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:57\n@@ -54,7 +54,7 @@\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n- group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n+ group.addoption(\"--sort-datafile\", action=\"store\", dest='XXsort_datafileXX', help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n> group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n\ntest/test_plugin.py:77: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-datafile',)\nkwargs = {'action': 'store', 'dest': 'sort_datafile', 'help': 'Location to store pytest-sort data. (default: ./.pytest_sort)'}\nexpected = call('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.5797016620635986}, {"mutant": {"mutator_name": "String", "lineno": 58, "col_offset": 20, "end_lineno": 58, "end_col_offset": 37, "text": "'XX--sort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:58\n@@ -55,7 +55,7 @@\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n- group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_datafileXX', action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-442/src/pytest_sort/plugin.py\", line 58, in pytest_addoption\n group.addoption('XX--sort_datafileXX', action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.33442234992980957}, {"mutant": {"mutator_name": "String", "lineno": 58, "col_offset": 46, "end_lineno": 58, "end_col_offset": 53, "text": "'XXstoreXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:58\n@@ -55,7 +55,7 @@\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n- group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_datafile\", action='XXstoreXX', dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstoreXX\"\n"}, "duration": 0.22594594955444336}, {"mutant": {"mutator_name": "String", "lineno": 58, "col_offset": 60, "end_lineno": 58, "end_col_offset": 75, "text": "'XXsort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:58\n@@ -55,7 +55,7 @@\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n- group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_datafile\", action=\"store\", dest='XXsort_datafileXX', help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n> group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:78: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_datafile',)\nkwargs = {'action': 'store', 'dest': 'sort_datafile', 'help': '==SUPPRESS=='}\nexpected = call('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.43758654594421387}, {"mutant": {"mutator_name": "String", "lineno": 59, "col_offset": 18, "end_lineno": 59, "end_col_offset": 33, "text": "'XXsort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:59\n@@ -56,7 +56,7 @@\n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_datafile\", help=help_text)\n+ parser.addini('XXsort_datafileXX', help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_datafile'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_datafile'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-445/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-445/src/pytest_sort/config.py\", line 59, in from_pytest\nINTERNALERROR> SortConfig._database_file_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-445/src/pytest_sort/config.py\", line 117, in _database_file_from_pytest\nINTERNALERROR> database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_datafile'\n"}, "duration": 0.34679341316223145}, {"mutant": {"mutator_name": "String", "lineno": 61, "col_offset": 20, "end_lineno": 61, "end_col_offset": 34, "text": "'XX--sort-debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:61\n@@ -58,7 +58,7 @@\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n- group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort-debugXX', action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-446/src/pytest_sort/plugin.py\", line 61, in pytest_addoption\n group.addoption('XX--sort-debugXX', action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3389761447906494}, {"mutant": {"mutator_name": "String", "lineno": 61, "col_offset": 43, "end_lineno": 61, "end_col_offset": 55, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:61\n@@ -58,7 +58,7 @@\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n- group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort-debug\", action='XXstore_trueXX', dest=\"sort_debug\", help=argparse.SUPPRESS)\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.3443295955657959}, {"mutant": {"mutator_name": "String", "lineno": 61, "col_offset": 62, "end_lineno": 61, "end_col_offset": 74, "text": "'XXsort_debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:61\n@@ -58,7 +58,7 @@\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n- group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort-debug\", action=\"store_true\", dest='XXsort_debugXX', help=argparse.SUPPRESS)\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_datafile\", help=help_text)\n \n> group.addoption.assert_any_call(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:81: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-debug',)\nkwargs = {'action': 'store_true', 'dest': 'sort_debug', 'help': '==SUPPRESS=='}\nexpected = call('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4340670108795166}, {"mutant": {"mutator_name": "String", "lineno": 62, "col_offset": 20, "end_lineno": 62, "end_col_offset": 34, "text": "'XX--sort_debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:62\n@@ -59,7 +59,7 @@\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption('XX--sort_debugXX', action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n def pytest_configure(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-449/src/pytest_sort/plugin.py\", line 62, in pytest_addoption\n group.addoption('XX--sort_debugXX', action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 386, in addoption\n option = Argument(*opts, **attrs)\n ^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 275, in __init__\n self._set_opt_strings(names)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 329, in _set_opt_strings\n raise ArgumentError(\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 219, in __init__\n self.option_id = str(option)\n ^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 342, in __repr__\n args += [\"dest: \" + repr(self.dest)]\n ^^^^^^^^^\nAttributeError: 'Argument' object has no attribute 'dest'\n"}, "duration": 0.3339211940765381}, {"mutant": {"mutator_name": "String", "lineno": 62, "col_offset": 43, "end_lineno": 62, "end_col_offset": 55, "text": "'XXstore_trueXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:62\n@@ -59,7 +59,7 @@\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_debug\", action='XXstore_trueXX', dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n def pytest_configure(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1308, in _preparse\n self.known_args_namespace = self._parser.parse_known_args(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 157, in parse_known_args\n return self.parse_known_and_unknown_args(args, namespace=namespace)[0]\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 171, in parse_known_and_unknown_args\n optparser = self._getparser()\n ^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/argparsing.py\", line 130, in _getparser\n arggroup.add_argument(*n, **a)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/argparse.py\", line 1471, in add_argument\n raise ValueError('unknown action \"%s\"' % (action_class,))\nValueError: unknown action \"XXstore_trueXX\"\n"}, "duration": 0.35063815116882324}, {"mutant": {"mutator_name": "String", "lineno": 62, "col_offset": 62, "end_lineno": 62, "end_col_offset": 74, "text": "'XXsort_debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:62\n@@ -59,7 +59,7 @@\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ group.addoption(\"--sort_debug\", action=\"store_true\", dest='XXsort_debugXX', help=argparse.SUPPRESS)\n \n \n def pytest_configure(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_datafile\", help=help_text)\n \n group.addoption.assert_any_call(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n> group.addoption.assert_any_call(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:82: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_debug',)\nkwargs = {'action': 'store_true', 'dest': 'sort_debug', 'help': '==SUPPRESS=='}\nexpected = call('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6927156448364258}, {"mutant": {"mutator_name": "String", "lineno": 68, "col_offset": 8, "end_lineno": 68, "end_col_offset": 17, "text": "'XXmarkersXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:68\n@@ -65,7 +65,7 @@\n def pytest_configure(config: pytest.Config) -> None:\n \"\"\"pytest_sort: Add markers to pytest.\"\"\"\n config.addinivalue_line(\n- \"markers\",\n+ 'XXmarkersXX',\n \"sort(mode,bucket): Override pytest-sort Options.\",\n )\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXmarkersXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXmarkersXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-452/src/pytest_sort/plugin.py\", line 67, in pytest_configure\nINTERNALERROR> config.addinivalue_line(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1483, in addinivalue_line\nINTERNALERROR> x = self.getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXmarkersXX'\n"}, "duration": 0.2320406436920166}, {"mutant": {"mutator_name": "String", "lineno": 69, "col_offset": 8, "end_lineno": 69, "end_col_offset": 58, "text": "'XXsort(mode,bucket): Override pytest-sort Options.XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:69\n@@ -66,7 +66,7 @@\n \"\"\"pytest_sort: Add markers to pytest.\"\"\"\n config.addinivalue_line(\n \"markers\",\n- \"sort(mode,bucket): Override pytest-sort Options.\",\n+ 'XXsort(mode,bucket): Override pytest-sort Options.XX',\n )\n \n config.addinivalue_line(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_configure FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_configure _______________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_configure(self, SortConfig):\n config = mock.MagicMock()\n \n plugin.pytest_configure(config)\n \n> config.addinivalue_line.assert_has_calls(\n [\n mock.call(\"markers\", \"sort(mode,bucket): Override pytest-sort Options.\"),\n mock.call(\n \"markers\", \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\"\n ),\n ]\n )\n\ntest/test_plugin.py:90: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'), call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\nE call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nE Actual: [call('markers', 'XXsort(mode,bucket): Override pytest-sort Options.XX'),\nE call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_configure - AssertionError: Calls not found.\nExpected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\n call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n Actual: [call('markers', 'XXsort(mode,bucket): Override pytest-sort Options.XX'),\n call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.46015453338623047}, {"mutant": {"mutator_name": "String", "lineno": 73, "col_offset": 8, "end_lineno": 73, "end_col_offset": 17, "text": "'XXmarkersXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:73\n@@ -70,7 +70,7 @@\n )\n \n config.addinivalue_line(\n- \"markers\",\n+ 'XXmarkersXX',\n \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\",\n )\n SortConfig.from_pytest(config)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXmarkersXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXmarkersXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-454/src/pytest_sort/plugin.py\", line 72, in pytest_configure\nINTERNALERROR> config.addinivalue_line(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1483, in addinivalue_line\nINTERNALERROR> x = self.getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXmarkersXX'\n"}, "duration": 0.3443918228149414}, {"mutant": {"mutator_name": "String", "lineno": 74, "col_offset": 8, "end_lineno": 74, "end_col_offset": 91, "text": "'XXorder(item_sort_key): Always use specified Sort Key for this test item or bucket.XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:74\n@@ -71,7 +71,7 @@\n \n config.addinivalue_line(\n \"markers\",\n- \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\",\n+ 'XXorder(item_sort_key): Always use specified Sort Key for this test item or bucket.XX',\n )\n SortConfig.from_pytest(config)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_configure FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_configure _______________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_configure(self, SortConfig):\n config = mock.MagicMock()\n \n plugin.pytest_configure(config)\n \n> config.addinivalue_line.assert_has_calls(\n [\n mock.call(\"markers\", \"sort(mode,bucket): Override pytest-sort Options.\"),\n mock.call(\n \"markers\", \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\"\n ),\n ]\n )\n\ntest/test_plugin.py:90: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'), call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\nE call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nE Actual: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\nE call('markers', 'XXorder(item_sort_key): Always use specified Sort Key for this test item or bucket.XX')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_configure - AssertionError: Calls not found.\nExpected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\n call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n Actual: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\n call('markers', 'XXorder(item_sort_key): Always use specified Sort Key for this test item or bucket.XX')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4298875331878662}, {"mutant": {"mutator_name": "String", "lineno": 81, "col_offset": 13, "end_lineno": 81, "end_col_offset": 27, "text": "'XXpytest-sort:XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:81\n@@ -78,7 +78,7 @@\n \n def pytest_report_header(config: pytest.Config) -> str: # noqa: ARG001\n \"\"\"pytest_sort: Build Header for pytest to display.\"\"\"\n- header = \"pytest-sort:\"\n+ header = 'XXpytest-sort:XX'\n \n for key, value in SortConfig.header_dict().items():\n header += f\"\\n {key}: {value}\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\nXXpytest-sort:XX\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_report_header FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestConfig.test_pytest_report_header _____________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_report_header(self, SortConfig):\n config = mock.MagicMock()\n SortConfig.header_dict.return_value = {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n }\n \n header = plugin.pytest_report_header(config)\n \n> assert header == \"pytest-sort:\\n sort-mode: random\\n sort-bucket: module\"\nE AssertionError\n\ntest/test_plugin.py:111: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_report_header - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6135988235473633}, {"mutant": {"mutator_name": "String", "lineno": 84, "col_offset": 20, "end_lineno": 84, "end_col_offset": 24, "text": "'XX\\n XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:84\n@@ -81,7 +81,7 @@\n header = \"pytest-sort:\"\n \n for key, value in SortConfig.header_dict().items():\n- header += f\"\\n {key}: {value}\"\n+ header += f\"'XX\\n XX'{key}: {value}\"\n \n return header\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:'XX\n XX'sort-mode: mutcov'XX\n XX'sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_report_header FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestConfig.test_pytest_report_header _____________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_report_header(self, SortConfig):\n config = mock.MagicMock()\n SortConfig.header_dict.return_value = {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n }\n \n header = plugin.pytest_report_header(config)\n \n> assert header == \"pytest-sort:\\n sort-mode: random\\n sort-bucket: module\"\nE AssertionError\n\ntest/test_plugin.py:111: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_report_header - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6089522838592529}, {"mutant": {"mutator_name": "String", "lineno": 84, "col_offset": 29, "end_lineno": 84, "end_col_offset": 31, "text": "'XX: XX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:84\n@@ -81,7 +81,7 @@\n header = \"pytest-sort:\"\n \n for key, value in SortConfig.header_dict().items():\n- header += f\"\\n {key}: {value}\"\n+ header += f\"\\n {key}'XX: XX'{value}\"\n \n return header\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode'XX: XX'mutcov\n sort-bucket'XX: XX'parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_report_header FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestConfig.test_pytest_report_header _____________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_report_header(self, SortConfig):\n config = mock.MagicMock()\n SortConfig.header_dict.return_value = {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n }\n \n header = plugin.pytest_report_header(config)\n \n> assert header == \"pytest-sort:\\n sort-mode: random\\n sort-bucket: module\"\nE AssertionError\n\ntest/test_plugin.py:111: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_report_header - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3892524242401123}, {"mutant": {"mutator_name": "String", "lineno": 104, "col_offset": 43, "end_lineno": 104, "end_col_offset": 50, "text": "'XXsetupXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:104\n@@ -101,7 +101,7 @@\n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n- if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n+ if SortConfig.record and call.when in ('XXsetupXX', \"call\", \"teardown\"):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_configure PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_report_header PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 95%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 165 passed in 1.24s =========================\n\n"}, "duration": 1.6162900924682617}, {"mutant": {"mutator_name": "String", "lineno": 104, "col_offset": 52, "end_lineno": 104, "end_col_offset": 58, "text": "'XXcallXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:104\n@@ -101,7 +101,7 @@\n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n- if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n+ if SortConfig.record and call.when in (\"setup\", 'XXcallXX', \"teardown\"):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_configure PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_report_header PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1] FAILED [ 96%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {}, when = 'call'\nout_recorded_times = {'test_item_1': {'call': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 166 passed in 0.82s =========================\n\n"}, "duration": 1.1887762546539307}, {"mutant": {"mutator_name": "String", "lineno": 104, "col_offset": 60, "end_lineno": 104, "end_col_offset": 70, "text": "'XXteardownXX'", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:104\n@@ -101,7 +101,7 @@\n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n- if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n+ if SortConfig.record and call.when in (\"setup\", \"call\", 'XXteardownXX'):\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_configure PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_report_header PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] PASSED [ 95%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1] PASSED [ 96%]\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times2-teardown-out_recorded_times2] FAILED [ 97%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times2-teardown-out_recorded_times2] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {}, when = 'teardown'\nout_recorded_times = {'test_item_1': {'teardown': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times2-teardown-out_recorded_times2] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 167 passed in 1.15s =========================\n\n"}, "duration": 1.409330129623413}, {"mutant": {"mutator_name": "FuncCall", "lineno": 20, "col_offset": 12, "end_lineno": 20, "end_col_offset": 42, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:20\n@@ -17,7 +17,7 @@\n \n def pytest_addoption(parser: pytest.Parser) -> None:\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n- group = parser.getgroup(\"pytest-sort\")\n+ group = None\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 399, in load_setuptools_entrypoints\n self.register(plugin, name=ep.name)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 491, in register\n ret: Optional[str] = super().register(plugin, name)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 164, in register\n hook._maybe_apply_history(hookimpl)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 559, in _maybe_apply_history\n res = self._hookexec(self.name, [method], kwargs, False)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\n raise exception.with_traceback(exception.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-462/src/pytest_sort/plugin.py\", line 22, in pytest_addoption\n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n ^^^^^^^^^^^^^^^\nAttributeError: 'NoneType' object has no attribute 'addoption'\n"}, "duration": 0.22418427467346191}, {"mutant": {"mutator_name": "FuncCall", "lineno": 22, "col_offset": 4, "end_lineno": 22, "end_col_offset": 85, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:22\n@@ -19,7 +19,7 @@\n \"\"\"pytest_sort: Add command line and ini options to pytest.\"\"\"\n group = parser.getgroup(\"pytest-sort\")\n \n- group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n+ None\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nERROR: usage: pytest [options] [file_or_dir] [file_or_dir] [...]\npytest: error: unrecognized arguments: --sort-mode=mutcov\n inifile: /home/runner/work/pytest-sort/pytest-sort/pyproject.toml\n rootdir: /home/runner/work/pytest-sort/pytest-sort\n\n"}, "duration": 0.2945899963378906}, {"mutant": {"mutator_name": "FuncCall", "lineno": 23, "col_offset": 4, "end_lineno": 23, "end_col_offset": 92, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:23\n@@ -20,7 +20,7 @@\n group = parser.getgroup(\"pytest-sort\")\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n- group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n> group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:25: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_mode',)\nkwargs = {'action': 'store', 'dest': 'sort_mode', 'help': '==SUPPRESS=='}\nexpected = call('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc...=SUPPRESS=='), call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.'), ...]\nexpected_string = \"addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_mode', action='store', dest='sort_mode', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6000852584838867}, {"mutant": {"mutator_name": "FuncCall", "lineno": 24, "col_offset": 4, "end_lineno": 24, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:24\n@@ -21,7 +21,7 @@\n \n group.addoption(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_mode\", help=str(modes))\n+ None\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n> parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n\ntest/test_plugin.py:26: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('sort_mode',)\nkwargs = {'help': \"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\"), call('sor...de=fastest', type='bool'), call('sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')]\nexpected_string = 'addini(\\'sort_mode\\', help=\"[\\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addini('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addini('sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4871859550476074}, {"mutant": {"mutator_name": "FuncCall", "lineno": 26, "col_offset": 4, "end_lineno": 26, "end_col_offset": 96, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:26\n@@ -23,7 +23,7 @@\n group.addoption(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_mode\", help=str(modes))\n \n- group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n+ None\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n> group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n\ntest/test_plugin.py:28: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket', 'help': \"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\"}\nexpected = call('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc...=SUPPRESS=='), call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.'), ...]\nexpected_string = 'addoption(\\'--sort-bucket\\', action=\\'store\\', dest=\\'sort_bucket\\', help=\"[\\'session\\', \\'package\\', \\'module\\', \\'class\\', \\'function\\', \\'parent\\', \\'grandparent\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket', action='store', dest='sort_bucket', help=\"['session', 'package', 'module', 'class', 'function', 'parent', 'grandparent']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6812305450439453}, {"mutant": {"mutator_name": "FuncCall", "lineno": 27, "col_offset": 4, "end_lineno": 27, "end_col_offset": 96, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:27\n@@ -24,7 +24,7 @@\n parser.addini(\"sort_mode\", help=str(modes))\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n- group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n> group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:29: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_bucket',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket', 'help': '==SUPPRESS=='}\nexpected = call('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc...=SUPPRESS=='), call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.'), ...]\nexpected_string = \"addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_bucket', action='store', dest='sort_bucket', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4325079917907715}, {"mutant": {"mutator_name": "FuncCall", "lineno": 28, "col_offset": 4, "end_lineno": 28, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:28\n@@ -25,7 +25,7 @@\n \n group.addoption(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_bucket\", help=str(bucket_types))\n+ None\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-468/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-468/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-468/src/pytest_sort/config.py\", line 74, in _bucket_from_pytest\nINTERNALERROR> SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_bucket'\n"}, "duration": 0.3479044437408447}, {"mutant": {"mutator_name": "FuncCall", "lineno": 31, "col_offset": 4, "end_lineno": 31, "end_col_offset": 25, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:31\n@@ -28,7 +28,7 @@\n parser.addini(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n- choices.extend(modes)\n+ None\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n> group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n\ntest/test_plugin.py:34: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket-mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': \"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc..., help=\"['sort_mode']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = 'addoption(\\'--sort-bucket-mode\\', action=\\'store\\', dest=\\'sort_bucket_mode\\', help=\"[\\'sort_mode\\', \\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4480092525482178}, {"mutant": {"mutator_name": "FuncCall", "lineno": 32, "col_offset": 4, "end_lineno": 32, "end_col_offset": 101, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:32\n@@ -29,7 +29,7 @@\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n- group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n+ None\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n> group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n\ntest/test_plugin.py:34: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-bucket-mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': \"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\"}\nexpected = call('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\")\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc...=SUPPRESS=='), call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.'), ...]\nexpected_string = 'addoption(\\'--sort-bucket-mode\\', action=\\'store\\', dest=\\'sort_bucket_mode\\', help=\"[\\'sort_mode\\', \\'ordered\\', \\'reverse\\', \\'md5\\', \\'random\\', \\'fastest\\', \\'diffcov\\', \\'mutcov\\']\")'\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-bucket-mode', action='store', dest='sort_bucket_mode', help=\"['sort_mode', 'ordered', 'reverse', 'md5', 'random', 'fastest', 'diffcov', 'mutcov']\") call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6915624141693115}, {"mutant": {"mutator_name": "FuncCall", "lineno": 33, "col_offset": 4, "end_lineno": 33, "end_col_offset": 106, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:33\n@@ -30,7 +30,7 @@\n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n- group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n> group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:37: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_bucket_mode',)\nkwargs = {'action': 'store', 'dest': 'sort_bucket_mode', 'help': '==SUPPRESS=='}\nexpected = call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc..., 'mutcov']\"), call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.'), ...]\nexpected_string = \"addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6886239051818848}, {"mutant": {"mutator_name": "FuncCall", "lineno": 34, "col_offset": 4, "end_lineno": 34, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:34\n@@ -31,7 +31,7 @@\n choices.extend(modes)\n group.addoption(\"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices))\n group.addoption(\"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_bucket_mode\", help=str(choices))\n+ None\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket_mode'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_bucket_mode'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-472/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-472/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-472/src/pytest_sort/config.py\", line 83, in _bucket_mode_from_pytest\nINTERNALERROR> config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_bucket_mode'\n"}, "duration": 0.23165011405944824}, {"mutant": {"mutator_name": "FuncCall", "lineno": 37, "col_offset": 4, "end_lineno": 37, "end_col_offset": 84, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:37\n@@ -34,7 +34,7 @@\n parser.addini(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n- group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n+ None\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini(\"sort_seed\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n> group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n\ntest/test_plugin.py:43: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-seed',)\nkwargs = {'action': 'store', 'dest': 'sort_seed', 'help': 'Random Seed to use with random mode.'}\nexpected = call('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-seed', action='store', dest='sort_seed', help='Random Seed to use with random mode.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.20s ===============================\n\n"}, "duration": 0.4583771228790283}, {"mutant": {"mutator_name": "FuncCall", "lineno": 38, "col_offset": 4, "end_lineno": 38, "end_col_offset": 92, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:38\n@@ -35,7 +35,7 @@\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n- group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n> group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:44: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_seed',)\nkwargs = {'action': 'store', 'dest': 'sort_seed', 'help': '==SUPPRESS=='}\nexpected = call('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_seed', action='store', dest='sort_seed', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6693482398986816}, {"mutant": {"mutator_name": "FuncCall", "lineno": 39, "col_offset": 4, "end_lineno": 39, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:39\n@@ -36,7 +36,7 @@\n help_text = \"Random Seed to use with random mode.\"\n group.addoption(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_seed\", help=help_text)\n+ None\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_seed'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_seed'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-475/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-475/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-475/src/pytest_sort/config.py\", line 109, in _seed_from_pytest\nINTERNALERROR> SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_seed'\n"}, "duration": 0.3534886837005615}, {"mutant": {"mutator_name": "FuncCall", "lineno": 42, "col_offset": 4, "end_lineno": 42, "end_col_offset": 99, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:42\n@@ -39,7 +39,7 @@\n parser.addini(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n- group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n+ None\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n> group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n\ntest/test_plugin.py:48: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-record-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_record', 'help': 'Records runtimes. Activated by default when sort-mode=fastest'}\nexpected = call('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-record-times', action='store_true', dest='sort_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.5290262699127197}, {"mutant": {"mutator_name": "FuncCall", "lineno": 43, "col_offset": 4, "end_lineno": 43, "end_col_offset": 107, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:43\n@@ -40,7 +40,7 @@\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n- group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n+ None\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n> group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:49: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_record_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_record', 'help': '==SUPPRESS=='}\nexpected = call('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_record_times', action='store_true', dest='sort_record', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5354719161987305}, {"mutant": {"mutator_name": "FuncCall", "lineno": 44, "col_offset": 4, "end_lineno": 44, "end_col_offset": 105, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:44\n@@ -41,7 +41,7 @@\n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n+ None\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n> group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n\ntest/test_plugin.py:52: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-no-record-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_no_record', 'help': 'Records runtimes. Activated by default when sort-mode=fastest'}\nexpected = call('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-no-record-times', action='store_true', dest='sort_no_record', help='Records runtimes. Activated by default when sort-mode=fastest') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6805098056793213}, {"mutant": {"mutator_name": "FuncCall", "lineno": 45, "col_offset": 4, "end_lineno": 45, "end_col_offset": 113, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:45\n@@ -42,7 +42,7 @@\n group.addoption(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n- group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:55: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_no_record_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_no_record', 'help': '==SUPPRESS=='}\nexpected = call('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_no_record_times', action='store_true', dest='sort_no_record', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4302346706390381}, {"mutant": {"mutator_name": "FuncCall", "lineno": 46, "col_offset": 4, "end_lineno": 46, "end_col_offset": 67, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:46\n@@ -43,7 +43,7 @@\n group.addoption(\"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS)\n group.addoption(\"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text)\n group.addoption(\"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n+ None\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_record_times'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_record_times'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-480/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-480/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-480/src/pytest_sort/config.py\", line 100, in _record_from_pytest\nINTERNALERROR> SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_record_times'\n"}, "duration": 0.35034894943237305}, {"mutant": {"mutator_name": "FuncCall", "lineno": 49, "col_offset": 4, "end_lineno": 49, "end_col_offset": 103, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:49\n@@ -46,7 +46,7 @@\n parser.addini(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n- group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n+ None\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n> group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n\ntest/test_plugin.py:61: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-reset-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_reset_times', 'help': 'Clear the recorded runtimes before sorting.'}\nexpected = call('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-reset-times', action='store_true', dest='sort_reset_times', help='Clear the recorded runtimes before sorting.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4445819854736328}, {"mutant": {"mutator_name": "FuncCall", "lineno": 50, "col_offset": 4, "end_lineno": 50, "end_col_offset": 111, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:50\n@@ -47,7 +47,7 @@\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption(\"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text)\n- group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n+ None\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:64: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_reset_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_reset_times', 'help': '==SUPPRESS=='}\nexpected = call('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_reset_times', action='store_true', dest='sort_reset_times', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6772341728210449}, {"mutant": {"mutator_name": "FuncCall", "lineno": 53, "col_offset": 4, "end_lineno": 53, "end_col_offset": 105, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:53\n@@ -50,7 +50,7 @@\n group.addoption(\"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS)\n \n help_text = \"At end of report current times.\"\n- group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n+ None\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n> group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n\ntest/test_plugin.py:69: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-report-times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_report_times', 'help': 'At end of report current times.'}\nexpected = call('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-report-times', action='store_true', dest='sort_report_times', help='At end of report current times.') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6873819828033447}, {"mutant": {"mutator_name": "FuncCall", "lineno": 54, "col_offset": 4, "end_lineno": 54, "end_col_offset": 113, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:54\n@@ -51,7 +51,7 @@\n \n help_text = \"At end of report current times.\"\n group.addoption(\"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text)\n- group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n+ None\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n> group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n\ntest/test_plugin.py:72: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_report_times',)\nkwargs = {'action': 'store_true', 'dest': 'sort_report_times', 'help': '==SUPPRESS=='}\nexpected = call('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_report_times', action='store_true', dest='sort_report_times', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.49889254570007324}, {"mutant": {"mutator_name": "FuncCall", "lineno": 57, "col_offset": 4, "end_lineno": 57, "end_col_offset": 92, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:57\n@@ -54,7 +54,7 @@\n group.addoption(\"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS)\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n- group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n+ None\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n> group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n\ntest/test_plugin.py:77: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-datafile',)\nkwargs = {'action': 'store', 'dest': 'sort_datafile', 'help': 'Location to store pytest-sort data. (default: ./.pytest_sort)'}\nexpected = call('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-datafile', action='store', dest='sort_datafile', help='Location to store pytest-sort data. (default: ./.pytest_sort)') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.44165802001953125}, {"mutant": {"mutator_name": "FuncCall", "lineno": 58, "col_offset": 4, "end_lineno": 58, "end_col_offset": 100, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:58\n@@ -55,7 +55,7 @@\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n- group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n+ None\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n> group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:78: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_datafile',)\nkwargs = {'action': 'store', 'dest': 'sort_datafile', 'help': '==SUPPRESS=='}\nexpected = call('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_datafile', action='store', dest='sort_datafile', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.685833215713501}, {"mutant": {"mutator_name": "FuncCall", "lineno": 59, "col_offset": 4, "end_lineno": 59, "end_col_offset": 50, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:59\n@@ -56,7 +56,7 @@\n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n- parser.addini(\"sort_datafile\", help=help_text)\n+ None\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_datafile'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'sort_datafile'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-487/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-487/src/pytest_sort/config.py\", line 59, in from_pytest\nINTERNALERROR> SortConfig._database_file_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-487/src/pytest_sort/config.py\", line 117, in _database_file_from_pytest\nINTERNALERROR> database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'sort_datafile'\n"}, "duration": 0.3518350124359131}, {"mutant": {"mutator_name": "FuncCall", "lineno": 61, "col_offset": 4, "end_lineno": 61, "end_col_offset": 99, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:61\n@@ -58,7 +58,7 @@\n group.addoption(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini(\"sort_datafile\", help=help_text)\n \n- group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ None\n group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_datafile\", help=help_text)\n \n> group.addoption.assert_any_call(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:81: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort-debug',)\nkwargs = {'action': 'store_true', 'dest': 'sort_debug', 'help': '==SUPPRESS=='}\nexpected = call('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort-debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4382040500640869}, {"mutant": {"mutator_name": "FuncCall", "lineno": 62, "col_offset": 4, "end_lineno": 62, "end_col_offset": 99, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:62\n@@ -59,7 +59,7 @@\n parser.addini(\"sort_datafile\", help=help_text)\n \n group.addoption(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n- group.addoption(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n+ None\n \n \n def pytest_configure(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_addoption FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_addoption _______________________\n\nself = \n\n def test_pytest_addoption(self):\n parser = mock.MagicMock()\n group = parser.getgroup.return_value\n \n plugin.pytest_addoption(parser)\n \n parser.getgroup.assert_called_with(\"pytest-sort\")\n \n group.addoption.assert_any_call(\"--sort-mode\", action=\"store\", dest=\"sort_mode\", help=str(modes))\n group.addoption.assert_any_call(\"--sort_mode\", action=\"store\", dest=\"sort_mode\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_mode\", help=str(modes))\n \n group.addoption.assert_any_call(\"--sort-bucket\", action=\"store\", dest=\"sort_bucket\", help=str(bucket_types))\n group.addoption.assert_any_call(\"--sort_bucket\", action=\"store\", dest=\"sort_bucket\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_bucket\", help=str(bucket_types))\n \n choices = [\"sort_mode\"]\n choices.extend(modes)\n group.addoption.assert_any_call(\n \"--sort-bucket-mode\", action=\"store\", dest=\"sort_bucket_mode\", help=str(choices)\n )\n group.addoption.assert_any_call(\n \"--sort_bucket_mode\", action=\"store\", dest=\"sort_bucket_mode\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_bucket_mode\", help=str(choices))\n \n help_text = \"Random Seed to use with random mode.\"\n group.addoption.assert_any_call(\"--sort-seed\", action=\"store\", dest=\"sort_seed\", help=help_text)\n group.addoption.assert_any_call(\"--sort_seed\", action=\"store\", dest=\"sort_seed\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_seed\", help=help_text)\n \n help_text = \"Records runtimes. Activated by default when sort-mode=fastest\"\n group.addoption.assert_any_call(\"--sort-record-times\", action=\"store_true\", dest=\"sort_record\", help=help_text)\n group.addoption.assert_any_call(\n \"--sort_record_times\", action=\"store_true\", dest=\"sort_record\", help=argparse.SUPPRESS\n )\n group.addoption.assert_any_call(\n \"--sort-no-record-times\", action=\"store_true\", dest=\"sort_no_record\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_no_record_times\", action=\"store_true\", dest=\"sort_no_record\", help=argparse.SUPPRESS\n )\n parser.addini.assert_any_call(\"sort_record_times\", help=help_text, type=\"bool\")\n \n help_text = \"Clear the recorded runtimes before sorting.\"\n group.addoption.assert_any_call(\n \"--sort-reset-times\", action=\"store_true\", dest=\"sort_reset_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_reset_times\", action=\"store_true\", dest=\"sort_reset_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"At end of report current times.\"\n group.addoption.assert_any_call(\n \"--sort-report-times\", action=\"store_true\", dest=\"sort_report_times\", help=help_text\n )\n group.addoption.assert_any_call(\n \"--sort_report_times\", action=\"store_true\", dest=\"sort_report_times\", help=argparse.SUPPRESS\n )\n \n help_text = \"Location to store pytest-sort data. (default: ./.pytest_sort)\"\n group.addoption.assert_any_call(\"--sort-datafile\", action=\"store\", dest=\"sort_datafile\", help=help_text)\n group.addoption.assert_any_call(\"--sort_datafile\", action=\"store\", dest=\"sort_datafile\", help=argparse.SUPPRESS)\n parser.addini.assert_any_call(\"sort_datafile\", help=help_text)\n \n group.addoption.assert_any_call(\"--sort-debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n> group.addoption.assert_any_call(\"--sort_debug\", action=\"store_true\", dest=\"sort_debug\", help=argparse.SUPPRESS)\n\ntest/test_plugin.py:82: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ('--sort_debug',)\nkwargs = {'action': 'store_true', 'dest': 'sort_debug', 'help': '==SUPPRESS=='}\nexpected = call('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\ncause = None\nactual = [call('--sort-mode', action='store', dest='sort_mode', help=\"['ordered', 'reverse', 'md5', 'random', 'fastest', 'diffc... 'diffcov', 'mutcov']\"), call('--sort_bucket_mode', action='store', dest='sort_bucket_mode', help='==SUPPRESS=='), ...]\nexpected_string = \"addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==')\"\n\n def assert_any_call(self, /, *args, **kwargs):\n \"\"\"assert the mock has been called with the specified arguments.\n \n The assert passes if the mock has *ever* been called, unlike\n `assert_called_with` and `assert_called_once_with` that only pass if\n the call is the most recent one.\"\"\"\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n cause = expected if isinstance(expected, Exception) else None\n actual = [self._call_matcher(c) for c in self.call_args_list]\n if cause or expected not in _AnyComparer(actual):\n expected_string = self._format_mock_call_signature(args, kwargs)\n> raise AssertionError(\n '%s call not found' % expected_string\n ) from cause\nE AssertionError: addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:1015: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_addoption - AssertionError: addoption('--sort_debug', action='store_true', dest='sort_debug', help='==SUPPRESS==') call not found\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6888024806976318}, {"mutant": {"mutator_name": "FuncCall", "lineno": 67, "col_offset": 4, "end_lineno": 70, "end_col_offset": 5, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:67\n@@ -64,10 +64,7 @@\n \n def pytest_configure(config: pytest.Config) -> None:\n \"\"\"pytest_sort: Add markers to pytest.\"\"\"\n- config.addinivalue_line(\n- \"markers\",\n- \"sort(mode,bucket): Override pytest-sort Options.\",\n- )\n+ None\n \n config.addinivalue_line(\n \"markers\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_configure FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_configure _______________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_configure(self, SortConfig):\n config = mock.MagicMock()\n \n plugin.pytest_configure(config)\n \n> config.addinivalue_line.assert_has_calls(\n [\n mock.call(\"markers\", \"sort(mode,bucket): Override pytest-sort Options.\"),\n mock.call(\n \"markers\", \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\"\n ),\n ]\n )\n\ntest/test_plugin.py:90: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'), call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\nE call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nE Actual: [call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_configure - AssertionError: Calls not found.\nExpected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\n call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n Actual: [call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6822569370269775}, {"mutant": {"mutator_name": "FuncCall", "lineno": 72, "col_offset": 4, "end_lineno": 75, "end_col_offset": 5, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:72\n@@ -69,10 +69,7 @@\n \"sort(mode,bucket): Override pytest-sort Options.\",\n )\n \n- config.addinivalue_line(\n- \"markers\",\n- \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\",\n- )\n+ None\n SortConfig.from_pytest(config)\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_configure FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestConfig.test_pytest_configure _______________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_configure(self, SortConfig):\n config = mock.MagicMock()\n \n plugin.pytest_configure(config)\n \n> config.addinivalue_line.assert_has_calls(\n [\n mock.call(\"markers\", \"sort(mode,bucket): Override pytest-sort Options.\"),\n mock.call(\n \"markers\", \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\"\n ),\n ]\n )\n\ntest/test_plugin.py:90: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \ncalls = [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'), call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nany_order = False\n\n def assert_has_calls(self, calls, any_order=False):\n \"\"\"assert the mock has been called with the specified calls.\n The `mock_calls` list is checked for the calls.\n \n If `any_order` is False (the default) then the calls must be\n sequential. There can be extra calls before or after the\n specified calls.\n \n If `any_order` is True then the calls can be in any order, but\n they must all appear in `mock_calls`.\"\"\"\n expected = [self._call_matcher(c) for c in calls]\n cause = next((e for e in expected if isinstance(e, Exception)), None)\n all_calls = _CallList(self._call_matcher(c) for c in self.mock_calls)\n if not any_order:\n if expected not in all_calls:\n if cause is None:\n problem = 'Calls not found.'\n else:\n problem = ('Error processing expected calls.\\n'\n 'Errors: {}').format(\n [e if isinstance(e, Exception) else None\n for e in expected])\n> raise AssertionError(\n f'{problem}\\n'\n f'Expected: {_CallList(calls)}'\n f'{self._calls_repr(prefix=\" Actual\").rstrip(\".\")}'\n ) from cause\nE AssertionError: Calls not found.\nE Expected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\nE call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\nE Actual: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.')]\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:981: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_configure - AssertionError: Calls not found.\nExpected: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.'),\n call('markers', 'order(item_sort_key): Always use specified Sort Key for this test item or bucket.')]\n Actual: [call('markers', 'sort(mode,bucket): Override pytest-sort Options.')]\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.42869019508361816}, {"mutant": {"mutator_name": "FuncCall", "lineno": 76, "col_offset": 4, "end_lineno": 76, "end_col_offset": 34, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:76\n@@ -73,7 +73,7 @@\n \"markers\",\n \"order(item_sort_key): Always use specified Sort Key for this test item or bucket.\",\n )\n- SortConfig.from_pytest(config)\n+ None\n \n \n def pytest_report_header(config: pytest.Config) -> str: # noqa: ARG001\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: ordered\n sort-bucket: parent\n sort-bucket-mode: sort_mode\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-492/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-492/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-492/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: 'sort_mode'\n\n============================ no tests ran in 0.13s =============================\n\n"}, "duration": 0.5031886100769043}, {"mutant": {"mutator_name": "FuncCall", "lineno": 83, "col_offset": 22, "end_lineno": 83, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:83\n@@ -80,7 +80,7 @@\n \"\"\"pytest_sort: Build Header for pytest to display.\"\"\"\n header = \"pytest-sort:\"\n \n- for key, value in SortConfig.header_dict().items():\n+ for key, value in None:\n header += f\"\\n {key}: {value}\"\n \n return header\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 269, in wrap_session\nINTERNALERROR> config.hook.pytest_sessionstart(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/terminal.py\", line 771, in pytest_sessionstart\nINTERNALERROR> lines = self.config.hook.pytest_report_header(\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/compat.py\", line 66, in fixed_hook\nINTERNALERROR> return hook(**kw)\nINTERNALERROR> ^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-493/src/pytest_sort/plugin.py\", line 83, in pytest_report_header\nINTERNALERROR> for key, value in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n"}, "duration": 0.24776411056518555}, {"mutant": {"mutator_name": "FuncCall", "lineno": 96, "col_offset": 8, "end_lineno": 96, "end_col_offset": 18, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:96\n@@ -93,7 +93,7 @@\n ) -> None:\n \"\"\"pytest_sort: Modify item order.\"\"\"\n if SortConfig.reset:\n- clear_db()\n+ None\n \n sort_items(items)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestExecute.test_pytest_collection_modifyitems_reset _____________\n\nself = \nSortConfig = \nclear_db = \nsort_items = \n\n @mock.patch(\"pytest_sort.plugin.sort_items\")\n @mock.patch(\"pytest_sort.plugin.clear_db\")\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_collection_modifyitems_reset(self, SortConfig, clear_db, sort_items):\n session = mock.MagicMock()\n config = mock.MagicMock()\n items = mock.MagicMock()\n \n SortConfig.reset = True\n \n plugin.pytest_collection_modifyitems(session, config, items)\n> clear_db.assert_called()\n\ntest/test_plugin.py:140: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \n\n def assert_called(self):\n \"\"\"assert that the mock was called at least once\n \"\"\"\n if self.call_count == 0:\n msg = (\"Expected '%s' to have been called.\" %\n (self._mock_name or 'mock'))\n> raise AssertionError(msg)\nE AssertionError: Expected 'clear_db' to have been called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:913: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset - AssertionError: Expected 'clear_db' to have been called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.689305305480957}, {"mutant": {"mutator_name": "FuncCall", "lineno": 98, "col_offset": 4, "end_lineno": 98, "end_col_offset": 21, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:98\n@@ -95,7 +95,7 @@\n if SortConfig.reset:\n clear_db()\n \n- sort_items(items)\n+ None\n \n \n @pytest.hookimpl(hookwrapper=True) # pragma: no mutate\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores PASSED [ 90%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 91%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 91%]\ntest/test_plugin.py::test_plugin PASSED [ 92%]\ntest/test_plugin.py::TestConfig::test_pytest_addoption PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_configure PASSED [ 93%]\ntest/test_plugin.py::TestConfig::test_pytest_report_header PASSED [ 94%]\ntest/test_plugin.py::TestExecute::test_pytest_collection_modifyitems FAILED [ 94%]\n\n=================================== FAILURES ===================================\n________________ TestExecute.test_pytest_collection_modifyitems ________________\n\nself = \nSortConfig = \nclear_db = \nsort_items = \n\n @mock.patch(\"pytest_sort.plugin.sort_items\")\n @mock.patch(\"pytest_sort.plugin.clear_db\")\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_collection_modifyitems(self, SortConfig, clear_db, sort_items):\n session = mock.MagicMock()\n config = mock.MagicMock()\n items = mock.MagicMock()\n \n SortConfig.reset = False\n \n plugin.pytest_collection_modifyitems(session, config, items)\n clear_db.assert_not_called()\n> sort_items.assert_called_with(items)\n\ntest/test_plugin.py:127: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (,), kwargs = {}\nexpected = \"sort_items()\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: sort_items()\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: sort_items()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_collection_modifyitems - AssertionError: expected call not found.\nExpected: sort_items()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 163 passed in 0.77s =========================\n\n"}, "duration": 1.0263421535491943}, {"mutant": {"mutator_name": "FuncCall", "lineno": 105, "col_offset": 19, "end_lineno": 105, "end_col_offset": 53, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:105\n@@ -102,7 +102,7 @@\n def pytest_runtest_makereport(item: pytest.Item, call: pytest.CallInfo) -> Generator:\n \"\"\"pytest_sort: Record test runtimes in memory.\"\"\"\n if SortConfig.record and call.when in (\"setup\", \"call\", \"teardown\"):\n- duration = int(call.duration * 1_000_000_000) # convert to ns\n+ duration = None # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestExecute.test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] _\n\nself = \nSortConfig = , record = True\nrecorded_times = {'test_item_1': {'setup': None}}, when = 'setup'\nout_recorded_times = {'test_item_1': {'setup': 1123456789}}\n\n @pytest.mark.parametrize(\n (\"record\", \"recorded_times\", \"when\", \"out_recorded_times\"),\n [\n (True, {}, \"setup\", {\"test_item_1\": {\"setup\": 1_123_456_789}}),\n (True, {}, \"call\", {\"test_item_1\": {\"call\": 1_123_456_789}}),\n (True, {}, \"teardown\", {\"test_item_1\": {\"teardown\": 1_123_456_789}}),\n (True, {}, \"collect\", {}),\n (True, {\"test_item_1\": {\"setup\": 5}}, \"call\", {\"test_item_1\": {\"setup\": 5, \"call\": 1_123_456_789}}),\n (False, {}, \"setup\", {}),\n ],\n )\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_runtest_makereport(self, SortConfig, record, recorded_times, when, out_recorded_times):\n SortConfig.record = record\n SortConfig.recorded_times = recorded_times\n \n item = mock.MagicMock(nodeid=\"test_item_1\")\n call = mock.MagicMock(when=when, duration=1.123_456_789)\n \n for i in plugin.pytest_runtest_makereport(item, call):\n assert i is None\n \n> assert SortConfig.recorded_times == out_recorded_times\nE AssertionError\n\ntest/test_plugin.py:165: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6101040840148926}, {"mutant": {"mutator_name": "FuncCall", "lineno": 122, "col_offset": 8, "end_lineno": 122, "end_col_offset": 52, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:122\n@@ -119,7 +119,7 @@\n ) -> None:\n \"\"\"pytest_sort: Store recorded runtimes in database.\"\"\"\n if SortConfig.recorded_times:\n- update_test_cases(SortConfig.recorded_times)\n+ None\n \n if SortConfig.report:\n print_recorded_times_report(terminalreporter)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_terminal_summary FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestExecute.test_pytest_terminal_summary ___________________\n\nself = \nSortConfig = \nupdate_test_cases = \nprint_recorded_times_report = \n\n @mock.patch(\"pytest_sort.plugin.print_recorded_times_report\")\n @mock.patch(\"pytest_sort.plugin.update_test_cases\")\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_terminal_summary(self, SortConfig, update_test_cases, print_recorded_times_report):\n SortConfig.recorded_times = {\n \"test_item_1\": {\"setup\": 1},\n \"test_item_2\": {\"setup\": 2},\n }\n terminalreporter = mock.MagicMock()\n exitstatus = mock.MagicMock()\n config = mock.MagicMock()\n \n SortConfig.report = True\n \n plugin.pytest_terminal_summary(terminalreporter, exitstatus, config)\n \n> update_test_cases.assert_called_with(SortConfig.recorded_times)\n\ntest/test_plugin.py:183: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = ({'test_item_1': {'setup': 1}, 'test_item_2': {'setup': 2}},)\nkwargs = {}\nexpected = \"update_test_cases({'test_item_1': {'setup': 1}, 'test_item_2': {'setup': 2}})\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: update_test_cases({'test_item_1': {'setup': 1}, 'test_item_2': {'setup': 2}})\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: update_test_cases({'test_item_1': {'setup': 1}, 'test_item_2': {'setup': 2}})\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_terminal_summary - AssertionError: expected call not found.\nExpected: update_test_cases({'test_item_1': {'setup': 1}, 'test_item_2': {'setup': 2}})\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.6855735778808594}, {"mutant": {"mutator_name": "FuncCall", "lineno": 125, "col_offset": 8, "end_lineno": 125, "end_col_offset": 53, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:125\n@@ -122,4 +122,4 @@\n update_test_cases(SortConfig.recorded_times)\n \n if SortConfig.report:\n- print_recorded_times_report(terminalreporter)\n+ None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestExecute::test_pytest_terminal_summary FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestExecute.test_pytest_terminal_summary ___________________\n\nself = \nSortConfig = \nupdate_test_cases = \nprint_recorded_times_report = \n\n @mock.patch(\"pytest_sort.plugin.print_recorded_times_report\")\n @mock.patch(\"pytest_sort.plugin.update_test_cases\")\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_terminal_summary(self, SortConfig, update_test_cases, print_recorded_times_report):\n SortConfig.recorded_times = {\n \"test_item_1\": {\"setup\": 1},\n \"test_item_2\": {\"setup\": 2},\n }\n terminalreporter = mock.MagicMock()\n exitstatus = mock.MagicMock()\n config = mock.MagicMock()\n \n SortConfig.report = True\n \n plugin.pytest_terminal_summary(terminalreporter, exitstatus, config)\n \n update_test_cases.assert_called_with(SortConfig.recorded_times)\n> print_recorded_times_report.assert_called_with(terminalreporter)\n\ntest/test_plugin.py:184: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (,), kwargs = {}\nexpected = \"print_recorded_times_report()\"\nactual = 'not called.'\nerror_message = \"expected call not found.\\nExpected: print_recorded_times_report()\\n Actual: not called.\"\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n> raise AssertionError(error_message)\nE AssertionError: expected call not found.\nE Expected: print_recorded_times_report()\nE Actual: not called.\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:935: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestExecute::test_pytest_terminal_summary - AssertionError: expected call not found.\nExpected: print_recorded_times_report()\n Actual: not called.\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6794710159301758}, {"mutant": {"mutator_name": "DictArray", "lineno": 108, "col_offset": 12, "end_lineno": 108, "end_col_offset": 50, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:108\n@@ -105,7 +105,7 @@\n duration = int(call.duration * 1_000_000_000) # convert to ns\n \n if item.nodeid not in SortConfig.recorded_times:\n- SortConfig.recorded_times[item.nodeid] = {}\n+ None = {}\n \n SortConfig.recorded_times[item.nodeid][call.when] = duration\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 990, in exec_module\n File \"\", line 1128, in get_code\n File \"\", line 1058, in source_to_code\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-499/src/pytest_sort/plugin.py\", line 108\n None = {}\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1832566261291504}, {"mutant": {"mutator_name": "DictArray", "lineno": 110, "col_offset": 8, "end_lineno": 110, "end_col_offset": 57, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:110\n@@ -107,7 +107,7 @@\n if item.nodeid not in SortConfig.recorded_times:\n SortConfig.recorded_times[item.nodeid] = {}\n \n- SortConfig.recorded_times[item.nodeid][call.when] = duration\n+ None = duration\n \n yield\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 990, in exec_module\n File \"\", line 1128, in get_code\n File \"\", line 1058, in source_to_code\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-500/src/pytest_sort/plugin.py\", line 110\n None = duration\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1847398281097412}, {"mutant": {"mutator_name": "Return", "lineno": 86, "col_offset": 4, "end_lineno": 86, "end_col_offset": 17, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/plugin.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/plugin.py:86\n@@ -83,7 +83,7 @@\n for key, value in SortConfig.header_dict().items():\n header += f\"\\n {key}: {value}\"\n \n- return header\n+ return None\n \n \n def pytest_collection_modifyitems(\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_plugin.py::TestConfig::test_pytest_report_header FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestConfig.test_pytest_report_header _____________________\n\nself = \nSortConfig = \n\n @mock.patch(\"pytest_sort.plugin.SortConfig\")\n def test_pytest_report_header(self, SortConfig):\n config = mock.MagicMock()\n SortConfig.header_dict.return_value = {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n }\n \n header = plugin.pytest_report_header(config)\n \n> assert header == \"pytest-sort:\\n sort-mode: random\\n sort-bucket: module\"\nE AssertionError\n\ntest/test_plugin.py:111: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_plugin.py::TestConfig::test_pytest_report_header - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6123874187469482}, {"mutant": {"mutator_name": "UnaryOp", "lineno": 102, "col_offset": 11, "end_lineno": 102, "end_col_offset": 50, "text": "isinstance(SortConfig.record, bool)", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:102\n@@ -99,7 +99,7 @@\n else:\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n- if not isinstance(SortConfig.record, bool):\n+ if isinstance(SortConfig.record, bool):\n SortConfig.record = None\n if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n SortConfig.record = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: []\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n> assert config.SortConfig.record is None\nE AssertionError\n\ntest/test_config.py:78: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.39522862434387207}, {"mutant": {"mutator_name": "UnaryOp", "lineno": 110, "col_offset": 11, "end_lineno": 110, "end_col_offset": 45, "text": "str(SortConfig.seed).isdigit()", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:110\n@@ -107,7 +107,7 @@\n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n- if not str(SortConfig.seed).isdigit():\n+ if str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-503/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-503/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-503/src/pytest_sort/config.py\", line 112, in _seed_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid seed value '553272' must be int\n"}, "duration": 0.34819698333740234}, {"mutant": {"mutator_name": "Compare", "lineno": 66, "col_offset": 26, "end_lineno": 66, "end_col_offset": 104, "text": "config.getoption('sort_mode') and config.getini('sort_mode') and SortConfig.mode", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:66\n@@ -63,7 +63,7 @@\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n+ SortConfig.mode = config.getoption('sort_mode') and config.getini('sort_mode') and SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-504/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-504/src/pytest_sort/config.py\", line 50, in from_pytest\nINTERNALERROR> SortConfig._mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-504/src/pytest_sort/config.py\", line 70, in _mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-mode=''\n"}, "duration": 0.3288912773132324}, {"mutant": {"mutator_name": "Compare", "lineno": 68, "col_offset": 11, "end_lineno": 68, "end_col_offset": 39, "text": "SortConfig.mode in modes", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:68\n@@ -65,7 +65,7 @@\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n- if SortConfig.mode not in modes:\n+ if SortConfig.mode in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n raise ValueError(msg)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-505/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-505/src/pytest_sort/config.py\", line 50, in from_pytest\nINTERNALERROR> SortConfig._mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-505/src/pytest_sort/config.py\", line 70, in _mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-mode='mutcov'\n"}, "duration": 0.23216032981872559}, {"mutant": {"mutator_name": "Compare", "lineno": 74, "col_offset": 28, "end_lineno": 74, "end_col_offset": 112, "text": "config.getoption('sort_bucket') and config.getini('sort_bucket') and SortConfig.bucket", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:74\n@@ -71,7 +71,7 @@\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n+ SortConfig.bucket = config.getoption('sort_bucket') and config.getini('sort_bucket') and SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-506/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-506/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-506/src/pytest_sort/config.py\", line 78, in _bucket_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket='None'\n"}, "duration": 0.3459129333496094}, {"mutant": {"mutator_name": "Compare", "lineno": 76, "col_offset": 11, "end_lineno": 76, "end_col_offset": 48, "text": "SortConfig.bucket in bucket_types", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:76\n@@ -73,7 +73,7 @@\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n- if SortConfig.bucket not in bucket_types:\n+ if SortConfig.bucket in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n raise ValueError(msg)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-507/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-507/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-507/src/pytest_sort/config.py\", line 78, in _bucket_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket='parent'\n"}, "duration": 0.23587417602539062}, {"mutant": {"mutator_name": "Compare", "lineno": 83, "col_offset": 12, "end_lineno": 83, "end_col_offset": 111, "text": "config.getoption('sort_bucket_mode') and config.getini('sort_bucket_mode') and SortConfig.bucket_mode", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:83\n@@ -80,7 +80,7 @@\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n+ config.getoption('sort_bucket_mode') and config.getini('sort_bucket_mode') and SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-508/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-508/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-508/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='None'\n"}, "duration": 0.3496558666229248}, {"mutant": {"mutator_name": "Compare", "lineno": 85, "col_offset": 11, "end_lineno": 85, "end_col_offset": 48, "text": "SortConfig.bucket_mode != 'sort_mode'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:85\n@@ -82,7 +82,7 @@\n SortConfig.bucket_mode = (\n config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n )\n- if SortConfig.bucket_mode == \"sort_mode\":\n+ if SortConfig.bucket_mode != 'sort_mode':\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-509/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-509/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-509/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='sort_mode'\n"}, "duration": 0.3488128185272217}, {"mutant": {"mutator_name": "Compare", "lineno": 88, "col_offset": 11, "end_lineno": 88, "end_col_offset": 46, "text": "SortConfig.bucket_mode in modes", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:88\n@@ -85,7 +85,7 @@\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n- if SortConfig.bucket_mode not in modes:\n+ if SortConfig.bucket_mode in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n raise ValueError(msg)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-510/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-510/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-510/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='mutcov'\n"}, "duration": 0.23472189903259277}, {"mutant": {"mutator_name": "Compare", "lineno": 94, "col_offset": 11, "end_lineno": 94, "end_col_offset": 81, "text": "config.getoption('sort_no_record') or config.getoption('sort_record')", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:94\n@@ -91,7 +91,7 @@\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n+ if config.getoption('sort_no_record') or config.getoption('sort_record'):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption0-getini0-True] _____\n\nself = \ngetoption = {'sort_record': True}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:178: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-511/src/pytest_sort/config.py:53: in from_pytest\n SortConfig._record_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption('sort_no_record') or config.getoption('sort_record'):\n> raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\nE ValueError: Do not use both --sort-record-times and --sort-no-record-times\n\n.poodle-temp/run-511/src/pytest_sort/config.py:95: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] - ValueError: Do not use both --sort-record-times and --sort-no-record-times\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 33 passed in 0.36s =========================\n\n"}, "duration": 0.7175066471099854}, {"mutant": {"mutator_name": "Compare", "lineno": 100, "col_offset": 32, "end_lineno": 100, "end_col_offset": 101, "text": "config.getoption('sort_record') and config.getini('sort_record_times')", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:100\n@@ -97,7 +97,7 @@\n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n+ SortConfig.record = config.getoption('sort_record') and config.getini('sort_record_times')\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: False\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption0-getini0-True] _____\n\nself = \ngetoption = {'sort_record': True}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.46s =========================\n\n"}, "duration": 0.828540563583374}, {"mutant": {"mutator_name": "Compare", "lineno": 104, "col_offset": 11, "end_lineno": 104, "end_col_offset": 69, "text": "SortConfig.mode == 'fastest' or SortConfig.record is None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:104\n@@ -101,7 +101,7 @@\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n- if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n+ if SortConfig.mode == 'fastest' or SortConfig.record is None:\n SortConfig.record = True\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: True\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n> assert config.SortConfig.record is None\nE AssertionError\n\ntest/test_config.py:78: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5221471786499023}, {"mutant": {"mutator_name": "Compare", "lineno": 109, "col_offset": 26, "end_lineno": 109, "end_col_offset": 104, "text": "config.getoption('sort_seed') and config.getini('sort_seed') and SortConfig.seed", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:109\n@@ -106,7 +106,7 @@\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n+ SortConfig.seed = config.getoption('sort_seed') and config.getini('sort_seed') and SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-514/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-514/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-514/src/pytest_sort/config.py\", line 112, in _seed_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid seed value 'None' must be int\n"}, "duration": 0.2723104953765869}, {"mutant": {"mutator_name": "Compare", "lineno": 117, "col_offset": 24, "end_lineno": 117, "end_col_offset": 99, "text": "config.getoption('sort_datafile') and config.getini('sort_datafile') and None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = config.getoption('sort_datafile') and config.getini('sort_datafile') and None\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] FAILED [ 24%]\n\n=================================== FAILURES ===================================\n_ TestSortConfig.test_from_pytest_database_file_default[getoption1-getini1-expected1] _\n\nself = \ngetoption = {'sort_datafile': './tests/.sort_db'}\ngetini = {'sort_datafile': './tests/.sort'}\nexpected = PosixPath('/home/runner/work/pytest-sort/pytest-sort/tests/.sort_db')\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({}, {}, Path.cwd() / \".pytest_sort_data\"),\n (\n {\"sort_datafile\": \"./tests/.sort_db\"},\n {\"sort_datafile\": \"./tests/.sort\"},\n Path.cwd() / \"tests\" / \".sort_db\",\n ),\n ({}, {\"sort_datafile\": \"./tests/.sort\"}, Path.cwd() / \"tests\" / \".sort\"),\n ],\n )\n def test_from_pytest_database_file_default(self, getoption, getini, expected: Path):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert database.database_file.absolute() == expected.absolute()\nE AssertionError\n\ntest/test_config.py:223: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 42 passed in 0.38s =========================\n\n"}, "duration": 0.6813807487487793}, {"mutant": {"mutator_name": "Compare", "lineno": 131, "col_offset": 11, "end_lineno": 131, "end_col_offset": 101, "text": "SortConfig.mode not in ('ordered', 'reverse') and SortConfig.bucket_mode != SortConfig.mode", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:131\n@@ -128,7 +128,7 @@\n \"sort-mode\": SortConfig.mode,\n }\n \n- if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n+ if SortConfig.mode not in ('ordered', 'reverse') and SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket\"] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 0%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 1%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch FAILED [ 1%]\n\n=================================== FAILURES ===================================\n____________ TestDict.test_header_dict_sort_bucket_ordered_mismatch ____________\n\nself = \n\n def test_header_dict_sort_bucket_ordered_mismatch(self):\n config.SortConfig.bucket = \"module\"\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"reverse\"\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n \"sort-bucket\": \"module\",\n \"sort-bucket-mode\": \"reverse\",\n }\nE AssertionError\n\ntest/test_config.py:262: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.26s ==========================\n\n"}, "duration": 0.6338858604431152}, {"mutant": {"mutator_name": "Compare", "lineno": 134, "col_offset": 11, "end_lineno": 134, "end_col_offset": 52, "text": "SortConfig.bucket_mode == SortConfig.mode", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:134\n@@ -131,7 +131,7 @@\n if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket\"] = SortConfig.bucket\n \n- if SortConfig.bucket_mode != SortConfig.mode:\n+ if SortConfig.bucket_mode == SortConfig.mode:\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n \n if SortConfig.mode == \"random\":\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-bucket-mode: mutcov\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6227371692657471}, {"mutant": {"mutator_name": "Compare", "lineno": 137, "col_offset": 11, "end_lineno": 137, "end_col_offset": 38, "text": "SortConfig.mode != 'random'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:137\n@@ -134,7 +134,7 @@\n if SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n \n- if SortConfig.mode == \"random\":\n+ if SortConfig.mode != 'random':\n config[\"sort-seed\"] = SortConfig.seed\n \n if SortConfig.reset:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-seed: 382439\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.3987703323364258}, {"mutant": {"mutator_name": "Compare", "lineno": 143, "col_offset": 11, "end_lineno": 143, "end_col_offset": 40, "text": "SortConfig.record is None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:143\n@@ -140,7 +140,7 @@\n if SortConfig.reset:\n config[\"sort-reset-times\"] = True\n \n- if SortConfig.record is not None:\n+ if SortConfig.record is None:\n config[\"sort-record-times\"] = SortConfig.record\n \n if SortConfig.report:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: None\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6270351409912109}, {"mutant": {"mutator_name": "Keyword", "lineno": 32, "col_offset": 28, "end_lineno": 32, "end_col_offset": 33, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:32\n@@ -29,7 +29,7 @@\n bucket: ClassVar[str] = \"parent\"\n bucket_mode: ClassVar[str] = \"sort_mode\"\n record: ClassVar[bool | None] = None # pragma: no mutate\n- reset: ClassVar[bool] = False\n+ reset: ClassVar[bool] = True\n report: ClassVar[bool] = False\n \n seed: ClassVar[int] = random.randint(0, 1_000_000)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________________ TestSortConfig.test_defaults _________________________\n\nself = \n\n def test_defaults(self):\n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"sort_mode\"\n assert config.SortConfig.record is None\n> assert config.SortConfig.reset is False\nE AssertionError\n\ntest/test_config.py:39: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.26s ==========================\n\n"}, "duration": 0.6408522129058838}, {"mutant": {"mutator_name": "Keyword", "lineno": 33, "col_offset": 29, "end_lineno": 33, "end_col_offset": 34, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:33\n@@ -30,7 +30,7 @@\n bucket_mode: ClassVar[str] = \"sort_mode\"\n record: ClassVar[bool | None] = None # pragma: no mutate\n reset: ClassVar[bool] = False\n- report: ClassVar[bool] = False\n+ report: ClassVar[bool] = True\n \n seed: ClassVar[int] = random.randint(0, 1_000_000)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________________ TestSortConfig.test_defaults _________________________\n\nself = \n\n def test_defaults(self):\n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"sort_mode\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n> assert config.SortConfig.report is False\nE AssertionError\n\ntest/test_config.py:40: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.16s ==========================\n\n"}, "duration": 0.41098785400390625}, {"mutant": {"mutator_name": "Keyword", "lineno": 37, "col_offset": 28, "end_lineno": 37, "end_col_offset": 33, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:37\n@@ -34,7 +34,7 @@\n \n seed: ClassVar[int] = random.randint(0, 1_000_000)\n \n- debug: ClassVar[bool] = False\n+ debug: ClassVar[bool] = True\n \n recorded_times: ClassVar[dict] = {}\n item_totals: ClassVar[dict] = {}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-debug: True\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... \nTest Case Order:\n(bucket_key, bucket_id, item_key, item_id)\n(-8, 'test/test_config.py::TestSortConfig', -8, 'test/test_config.py::TestSortConfig::test_create_default_seed')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_defaults')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_SortConfig_static_methods')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_default')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_mode_invalid')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_reset')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_report')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_seed_invalid')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True]')\n(-8, 'test/test_config.py::TestSortConfig', -3, 'test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False]')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_default')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_sort_bucket_other_match')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_random')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_reset')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_record')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_report')\n(-2, 'test/test_config.py::TestDict', -2, 'test/test_config.py::TestDict::test_header_dict_debug')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_marker_mode_bucket')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_mode_ordered_reverse')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_mode_reverse_ordered')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_mode_fastest')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_min_bucket_key_num')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_min_bucket_key_md5')\n(-2, 'test/test_core.py::TestCreateSortKey', -2, 'test/test_core.py::TestCreateSortKey::test_get_item_sort_key')\n(0, 'test/test_core.py::TestImports', 0, 'test/test_core.py::TestImports::test_import_md5_38')\n(0, 'test/test_core.py::TestImports', 0, 'test/test_core.py::TestImports::test_import_md5_39')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/]')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests]')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py]')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests]')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-]')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module')\n(0, 'test/test_core.py::TestCreateBucketIdForNode', 0, 'test/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_bucket_id')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_item_key')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_item_key_fastest')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_item_key_diffcov')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_item_key_mutcov')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_bucket_key')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov')\n(0, 'test/test_core.py::TestCreateBucketId', 0, 'test/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_order_marker_error')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3]')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error')\n(0, 'test/test_core.py::TestValidateMarker', 0, 'test/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers')\n(0, 'test/test_core.py::TestMarkerSettings', 0, 'test/test_core.py::TestMarkerSettings::test_get_marker_settings_error')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_random[random-ordered]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_random[ordered-random]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_random[random-random]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest]')\n(0, 'test/test_core.py::TestSortItems', 0, 'test/test_core.py::TestSortItems::test_sort_items_debug')\n(0, 'test/test_core.py::TestPrintReports', 0, 'test/test_core.py::TestPrintReports::test_print_recorded_times_report')\n(0, 'test/test_core.py::TestPrintReports', 0, 'test/test_core.py::TestPrintReports::test_print_test_case_order')\n(0, 'test/test_database.py::TestLoadSave', 0, 'test/test_database.py::TestLoadSave::test_load_data')\n(0, 'test/test_database.py::TestLoadSave', 0, 'test/test_database.py::TestLoadSave::test_load_data_loaded')\n(0, 'test/test_database.py::TestLoadSave', 0, 'test/test_database.py::TestLoadSave::test_load_data_no_file')\n(0, 'test/test_database.py::TestLoadSave', 0, 'test/test_database.py::TestLoadSave::test__save_data')\n(0, 'test/test_database.py::TestClearDb', 0, 'test/test_database.py::TestClearDb::test_clear_db')\n(0, 'test/test_database.py::TestUpdate', 0, 'test/test_database.py::TestUpdate::test_update_test_cases_update_less')\n(0, 'test/test_database.py::TestUpdate', 0, 'test/test_database.py::TestUpdate::test_update_test_cases_update_equal')\n(0, 'test/test_database.py::TestUpdate', 0, 'test/test_database.py::TestUpdate::test_update_test_cases_update_greater')\n(0, 'test/test_database.py::TestUpdate', 0, 'test/test_database.py::TestUpdate::test_update_test_cases_update_defaults')\n(0, 'test/test_database.py::TestUpdate', 0, 'test/test_database.py::TestUpdate::test_update_test_cases_update_mock')\n(0, 'test/test_database.py::TestGet', 0, 'test/test_database.py::TestGet::test_get_all_totals')\n(0, 'test/test_database.py::TestGet', 0, 'test/test_database.py::TestGet::test_get_bucket_total')\n(0, 'test/test_database.py::TestGet', 0, 'test/test_database.py::TestGet::test_get_bucket_total_not_found')\n(0, 'test/test_database.py::TestGet', 0, 'test/test_database.py::TestGet::test_get_stats')\n(0, 'test/test_database.py::TestGet', 0, 'test/test_database.py::TestGet::test_get_stats_not_found')\n(0, 'test/test_diffcov.py::TestParseTestContext', 0, 'test/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup]')\n(0, 'test/test_diffcov.py::TestParseTestContext', 0, 'test/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run]')\n(0, 'test/test_diffcov.py::TestParseTestContext', 0, 'test/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown]')\n(0, 'test/test_diffcov.py::TestParseTestContext', 0, 'test/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown]')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header')\n(0, 'test/test_diffcov.py::TestGitPatch', 0, 'test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes')\n(0, 'test/test_diffcov.py::TestMutChangedLines', 0, 'test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines')\n(0, 'test/test_diffcov.py::TestMutChangedLines', 0, 'test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end')\n(0, 'test/test_diffcov.py::TestMutChangedLines', 0, 'test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno')\n(0, 'test/test_diffcov.py::TestMutChangedLines', 0, 'test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source')\n(0, 'test/test_diffcov.py::TestCoverage', 0, 'test/test_diffcov.py::TestCoverage::test_get_line_coverage')\n(0, 'test/test_diffcov.py::TestGetScores', 0, 'test/test_diffcov.py::TestGetScores::test_get_test_scores')\n(0, 'test/test_diffcov.py::TestGetScores', 0, 'test/test_diffcov.py::TestGetScores::test_get_diff_test_scores')\n(0, 'test/test_diffcov.py::TestGetScores', 0, 'test/test_diffcov.py::TestGetScores::test_get_mut_test_scores')\n(0, 'test/test_plugin.py', 0, 'test/test_plugin.py::test_plugin')\n(0, 'test/test_plugin.py::TestConfig', 0, 'test/test_plugin.py::TestConfig::test_pytest_addoption')\n(0, 'test/test_plugin.py::TestConfig', 0, 'test/test_plugin.py::TestConfig::test_pytest_configure')\n(0, 'test/test_plugin.py::TestConfig', 0, 'test/test_plugin.py::TestConfig::test_pytest_report_header')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_collection_modifyitems')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_collection_modifyitems_reset')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times0-setup-out_recorded_times0]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times1-call-out_recorded_times1]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times2-teardown-out_recorded_times2]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times3-collect-out_recorded_times3]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[True-recorded_times4-call-out_recorded_times4]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_runtest_makereport[False-recorded_times5-setup-out_recorded_times5]')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_terminal_summary')\n(0, 'test/test_plugin.py::TestExecute', 0, 'test/test_plugin.py::TestExecute::test_pytest_terminal_summary_false')\ncollected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] FAILED [ 30%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_sort_debug[getoption0-False] _________\n\nself = \ngetoption = {}, expected = False\n\n @pytest.mark.parametrize(\n (\"getoption\", \"expected\"),\n [\n ({}, False),\n ({\"sort_debug\": True}, True),\n ({\"sort_debug\": False}, False),\n ],\n )\n def test_from_pytest_sort_debug(self, getoption, expected):\n pytest_config = self.PytestConfig(getoption, {})\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.debug == expected\nE AssertionError\n\ntest/test_config.py:236: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 52 passed in 0.70s =========================\n\n"}, "duration": 1.0846278667449951}, {"mutant": {"mutator_name": "Keyword", "lineno": 55, "col_offset": 72, "end_lineno": 55, "end_col_offset": 77, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:55\n@@ -52,7 +52,7 @@\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n \n- SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n+ SortConfig.reset = config.getoption(\"sort_reset_times\", default=True)\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n \n SortConfig._seed_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n> assert config.SortConfig.reset is False\nE AssertionError\n\ntest/test_config.py:79: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6472892761230469}, {"mutant": {"mutator_name": "Keyword", "lineno": 56, "col_offset": 74, "end_lineno": 56, "end_col_offset": 79, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:56\n@@ -53,7 +53,7 @@\n SortConfig._record_from_pytest(config)\n \n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n- SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n+ SortConfig.report = config.getoption(\"sort_report_times\", default=True)\n \n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n> assert config.SortConfig.report is False\nE AssertionError\n\ntest/test_config.py:80: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4024350643157959}, {"mutant": {"mutator_name": "Keyword", "lineno": 62, "col_offset": 31, "end_lineno": 62, "end_col_offset": 35, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:62\n@@ -59,7 +59,7 @@\n SortConfig._database_file_from_pytest(config)\n \n if config.getoption(\"sort_debug\"):\n- SortConfig.debug = True\n+ SortConfig.debug = False\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_sort_debug[getoption1-True] __________\n\nself = \ngetoption = {'sort_debug': True}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"expected\"),\n [\n ({}, False),\n ({\"sort_debug\": True}, True),\n ({\"sort_debug\": False}, False),\n ],\n )\n def test_from_pytest_sort_debug(self, getoption, expected):\n pytest_config = self.PytestConfig(getoption, {})\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.debug == expected\nE AssertionError\n\ntest/test_config.py:236: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.40820980072021484}, {"mutant": {"mutator_name": "Keyword", "lineno": 98, "col_offset": 32, "end_lineno": 98, "end_col_offset": 37, "text": "True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:98\n@@ -95,7 +95,7 @@\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n- SortConfig.record = False\n+ SortConfig.record = True\n else:\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_sort_record[getoption1-getini1-False] _____\n\nself = \ngetoption = {'sort_no_record': True}, getini = {}, expected = False\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.17s ===============================\n\n"}, "duration": 0.5411834716796875}, {"mutant": {"mutator_name": "Keyword", "lineno": 103, "col_offset": 32, "end_lineno": 103, "end_col_offset": 36, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:103\n@@ -100,7 +100,7 @@\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n- SortConfig.record = None\n+ SortConfig.record = ' '\n if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n SortConfig.record = True\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: \nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n> assert config.SortConfig.record is None\nE AssertionError\n\ntest/test_config.py:78: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.5449342727661133}, {"mutant": {"mutator_name": "Keyword", "lineno": 104, "col_offset": 65, "end_lineno": 104, "end_col_offset": 69, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:104\n@@ -101,7 +101,7 @@\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n- if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n+ if SortConfig.mode == \"fastest\" and SortConfig.record is ' ':\n SortConfig.record = True\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] FAILED [ 21%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption4-getini4-True] _____\n\nself = \ngetoption = {'sort_mode': 'fastest'}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=============================== warnings summary ===============================\ntest/test_config.py: 74 warnings\n /home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-528/src/pytest_sort/config.py:104: SyntaxWarning: \"is\" with 'str' literal. Did you mean \"==\"?\n if SortConfig.mode == \"fastest\" and SortConfig.record is ' ':\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n================== 1 failed, 36 passed, 74 warnings in 0.36s ===================\n\n/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-528/src/pytest_sort/config.py:104: SyntaxWarning: \"is\" with 'str' literal. Did you mean \"==\"?\n if SortConfig.mode == \"fastest\" and SortConfig.record is ' ':\n"}, "duration": 0.7413547039031982}, {"mutant": {"mutator_name": "Keyword", "lineno": 105, "col_offset": 32, "end_lineno": 105, "end_col_offset": 36, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:105\n@@ -102,7 +102,7 @@\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n- SortConfig.record = True\n+ SortConfig.record = False\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption4-getini4-True] _____\n\nself = \ngetoption = {'sort_mode': 'fastest'}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.27s ==========================\n\n"}, "duration": 0.5332362651824951}, {"mutant": {"mutator_name": "Keyword", "lineno": 117, "col_offset": 95, "end_lineno": 117, "end_col_offset": 99, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or ' '\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n assert config.SortConfig.report is False\n assert config.SortConfig.seed == seed\n \n> assert database.database_file.absolute() == (Path.cwd() / \".pytest_sort_data\").absolute()\nE AssertionError\n\ntest/test_config.py:83: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.22s ===============================\n\n"}, "duration": 0.5874698162078857}, {"mutant": {"mutator_name": "Keyword", "lineno": 141, "col_offset": 41, "end_lineno": 141, "end_col_offset": 45, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:141\n@@ -138,7 +138,7 @@\n config[\"sort-seed\"] = SortConfig.seed\n \n if SortConfig.reset:\n- config[\"sort-reset-times\"] = True\n+ config[\"sort-reset-times\"] = False\n \n if SortConfig.record is not None:\n config[\"sort-record-times\"] = SortConfig.record\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_reset FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_reset ________________________\n\nself = \n\n def test_header_dict_reset(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.reset = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-reset-times\": True,\n }\nE AssertionError\n\ntest/test_config.py:311: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_reset - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.4146084785461426}, {"mutant": {"mutator_name": "Keyword", "lineno": 143, "col_offset": 36, "end_lineno": 143, "end_col_offset": 40, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:143\n@@ -140,7 +140,7 @@\n if SortConfig.reset:\n config[\"sort-reset-times\"] = True\n \n- if SortConfig.record is not None:\n+ if SortConfig.record is not ' ':\n config[\"sort-record-times\"] = SortConfig.record\n \n if SortConfig.report:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-record-times: None\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=============================== warnings summary ===============================\ntest/test_config.py::TestDict::test_header_dict_default\n /home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-532/src/pytest_sort/config.py:143: SyntaxWarning: \"is not\" with 'str' literal. Did you mean \"!=\"?\n if SortConfig.record is not ' ':\n\n-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 warning in 0.26s =========================\n\n/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-532/src/pytest_sort/config.py:143: SyntaxWarning: \"is not\" with 'str' literal. Did you mean \"!=\"?\n if SortConfig.record is not ' ':\n"}, "duration": 0.6318635940551758}, {"mutant": {"mutator_name": "Keyword", "lineno": 147, "col_offset": 42, "end_lineno": 147, "end_col_offset": 46, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:147\n@@ -144,7 +144,7 @@\n config[\"sort-record-times\"] = SortConfig.record\n \n if SortConfig.report:\n- config[\"sort-report-times\"] = True\n+ config[\"sort-report-times\"] = False\n \n if SortConfig.debug:\n config[\"sort-debug\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_report _______________________\n\nself = \n\n def test_header_dict_report(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.report = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-report-times\": True,\n }\nE AssertionError\n\ntest/test_config.py:333: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_report - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6226511001586914}, {"mutant": {"mutator_name": "Keyword", "lineno": 150, "col_offset": 35, "end_lineno": 150, "end_col_offset": 39, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:150\n@@ -147,6 +147,6 @@\n config[\"sort-report-times\"] = True\n \n if SortConfig.debug:\n- config[\"sort-debug\"] = True\n+ config[\"sort-debug\"] = False\n \n return config\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_debug FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_debug ________________________\n\nself = \n\n def test_header_dict_debug(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.debug = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-debug\": True,\n }\nE AssertionError\n\ntest/test_config.py:344: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_debug - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.3991544246673584}, {"mutant": {"mutator_name": "Number", "lineno": 35, "col_offset": 41, "end_lineno": 35, "end_col_offset": 42, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:35\n@@ -32,7 +32,7 @@\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n \n- seed: ClassVar[int] = random.randint(0, 1_000_000)\n+ seed: ClassVar[int] = random.randint(1, 1_000_000)\n \n debug: ClassVar[bool] = False\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_create_default_seed ____________________\n\nself = \n\n def test_create_default_seed(self):\n random = mock.MagicMock()\n sys.modules[\"random\"] = random\n importlib.reload(config)\n> random.randint.assert_called_with(0, 1_000_000)\n\ntest/test_config.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (0, 1000000)\nkwargs = {}, expected = call(0, 1000000), actual = call(1, 1000000)\n_error_message = ._error_message at 0x7f60d3c97d80>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: randint(0, 1000000)\nE Actual: randint(1, 1000000)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_create_default_seed - AssertionError: expected call not found.\nExpected: randint(0, 1000000)\n Actual: randint(1, 1000000)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.34s ===============================\n\n"}, "duration": 0.7068021297454834}, {"mutant": {"mutator_name": "Number", "lineno": 35, "col_offset": 41, "end_lineno": 35, "end_col_offset": 42, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:35\n@@ -32,7 +32,7 @@\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n \n- seed: ClassVar[int] = random.randint(0, 1_000_000)\n+ seed: ClassVar[int] = random.randint(-1, 1_000_000)\n \n debug: ClassVar[bool] = False\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_create_default_seed ____________________\n\nself = \n\n def test_create_default_seed(self):\n random = mock.MagicMock()\n sys.modules[\"random\"] = random\n importlib.reload(config)\n> random.randint.assert_called_with(0, 1_000_000)\n\ntest/test_config.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (0, 1000000)\nkwargs = {}, expected = call(0, 1000000), actual = call(-1, 1000000)\n_error_message = ._error_message at 0x7fee38546020>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: randint(0, 1000000)\nE Actual: randint(-1, 1000000)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_create_default_seed - AssertionError: expected call not found.\nExpected: randint(0, 1000000)\n Actual: randint(-1, 1000000)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4420299530029297}, {"mutant": {"mutator_name": "Number", "lineno": 35, "col_offset": 44, "end_lineno": 35, "end_col_offset": 53, "text": "1000001", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:35\n@@ -32,7 +32,7 @@\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n \n- seed: ClassVar[int] = random.randint(0, 1_000_000)\n+ seed: ClassVar[int] = random.randint(0, 1000001)\n \n debug: ClassVar[bool] = False\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_create_default_seed ____________________\n\nself = \n\n def test_create_default_seed(self):\n random = mock.MagicMock()\n sys.modules[\"random\"] = random\n importlib.reload(config)\n> random.randint.assert_called_with(0, 1_000_000)\n\ntest/test_config.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (0, 1000000)\nkwargs = {}, expected = call(0, 1000000), actual = call(0, 1000001)\n_error_message = ._error_message at 0x7f2a3b2afb00>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: randint(0, 1000000)\nE Actual: randint(0, 1000001)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_create_default_seed - AssertionError: expected call not found.\nExpected: randint(0, 1000000)\n Actual: randint(0, 1000001)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.32s ===============================\n\n"}, "duration": 0.7004883289337158}, {"mutant": {"mutator_name": "Number", "lineno": 35, "col_offset": 44, "end_lineno": 35, "end_col_offset": 53, "text": "999999", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:35\n@@ -32,7 +32,7 @@\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n \n- seed: ClassVar[int] = random.randint(0, 1_000_000)\n+ seed: ClassVar[int] = random.randint(0, 999999)\n \n debug: ClassVar[bool] = False\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_create_default_seed ____________________\n\nself = \n\n def test_create_default_seed(self):\n random = mock.MagicMock()\n sys.modules[\"random\"] = random\n importlib.reload(config)\n> random.randint.assert_called_with(0, 1_000_000)\n\ntest/test_config.py:57: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = , args = (0, 1000000)\nkwargs = {}, expected = call(0, 1000000), actual = call(0, 999999)\n_error_message = ._error_message at 0x7f8ea8f44900>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: randint(0, 1000000)\nE Actual: randint(0, 999999)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_create_default_seed - AssertionError: expected call not found.\nExpected: randint(0, 1000000)\n Actual: randint(0, 999999)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.19s ===============================\n\n"}, "duration": 0.4462282657623291}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 9, "end_lineno": 14, "end_col_offset": 18, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = ['XXorderedXX', \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 2%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:73: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-539/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='ordered'\n\n.poodle-temp/run-539/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - ValueError: Invalid Value for sort-mode='ordered'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.29s ==========================\n\n"}, "duration": 0.6656382083892822}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 20, "end_lineno": 14, "end_col_offset": 29, "text": "'XXreverseXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", 'XXreverseXX', \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] FAILED [ 4%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption2-getini2-reverse] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'reverse'}, expected = 'reverse'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-540/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='reverse'\n\n.poodle-temp/run-540/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] - ValueError: Invalid Value for sort-mode='reverse'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 6 passed in 0.25s ==========================\n\n"}, "duration": 0.6127862930297852}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 31, "end_lineno": 14, "end_col_offset": 36, "text": "'XXmd5XX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", \"reverse\", 'XXmd5XX', \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_mode[getoption0-getini0-md5] _________\n\nself = \ngetoption = {'sort_mode': 'md5'}, getini = {'sort_mode': 'random'}\nexpected = 'md5'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-541/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='md5'\n\n.poodle-temp/run-541/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] - ValueError: Invalid Value for sort-mode='md5'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.19s ==========================\n\n"}, "duration": 0.44805073738098145}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 38, "end_lineno": 14, "end_col_offset": 46, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", \"reverse\", \"md5\", 'XXrandomXX', \"fastest\", \"diffcov\", \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] FAILED [ 5%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption4-getini4-random] ________\n\nself = \ngetoption = {}, getini = {'sort_mode': 'random'}, expected = 'random'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-542/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='random'\n\n.poodle-temp/run-542/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] - ValueError: Invalid Value for sort-mode='random'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 8 passed in 0.34s ==========================\n\n"}, "duration": 0.7164719104766846}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 48, "end_lineno": 14, "end_col_offset": 57, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", \"reverse\", \"md5\", \"random\", 'XXfastestXX', \"diffcov\", \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] FAILED [ 5%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption5-getini5-fastest] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'fastest'}, expected = 'fastest'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-543/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='fastest'\n\n.poodle-temp/run-543/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] - ValueError: Invalid Value for sort-mode='fastest'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 9 passed in 0.20s ==========================\n\n"}, "duration": 0.5388526916503906}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 59, "end_lineno": 14, "end_col_offset": 68, "text": "'XXdiffcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", 'XXdiffcovXX', \"mutcov\"]\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption6-getini6-diffcov] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'diffcov'}, expected = 'diffcov'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-544/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='diffcov'\n\n.poodle-temp/run-544/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] - ValueError: Invalid Value for sort-mode='diffcov'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.35s =========================\n\n"}, "duration": 0.622420072555542}, {"mutant": {"mutator_name": "String", "lineno": 14, "col_offset": 70, "end_lineno": 14, "end_col_offset": 78, "text": "'XXmutcovXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:14\n@@ -11,7 +11,7 @@\n if TYPE_CHECKING:\n import pytest\n \n-modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n+modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", 'XXmutcovXX']\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-545/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-545/src/pytest_sort/config.py\", line 50, in from_pytest\nINTERNALERROR> SortConfig._mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-545/src/pytest_sort/config.py\", line 70, in _mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-mode='mutcov'\n"}, "duration": 0.23702478408813477}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 16, "end_lineno": 15, "end_col_offset": 25, "text": "'XXsessionXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = ['XXsessionXX', \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] FAILED [ 9%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption0-getini0-session] ______\n\nself = \ngetoption = {'sort_bucket': 'session'}, getini = {'sort_bucket': 'class'}\nexpected = 'session'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-546/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='session'\n\n.poodle-temp/run-546/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] - ValueError: Invalid Value for sort-bucket='session'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 15 passed in 0.40s =========================\n\n"}, "duration": 0.7760319709777832}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 27, "end_lineno": 15, "end_col_offset": 36, "text": "'XXpackageXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", 'XXpackageXX', \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] FAILED [ 9%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption1-getini1-package] ______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'package'}, expected = 'package'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-547/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='package'\n\n.poodle-temp/run-547/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] - ValueError: Invalid Value for sort-bucket='package'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 16 passed in 0.40s =========================\n\n"}, "duration": 0.7779843807220459}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 38, "end_lineno": 15, "end_col_offset": 46, "text": "'XXmoduleXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", \"package\", 'XXmoduleXX', \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] FAILED [ 10%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption2-getini2-module] _______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'module'}, expected = 'module'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-548/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='module'\n\n.poodle-temp/run-548/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] - ValueError: Invalid Value for sort-bucket='module'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 17 passed in 0.25s =========================\n\n"}, "duration": 0.49234533309936523}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 48, "end_lineno": 15, "end_col_offset": 55, "text": "'XXclassXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", \"package\", \"module\", 'XXclassXX', \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] FAILED [ 10%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_bucket[getoption3-getini3-class] _______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'class'}, expected = 'class'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-549/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='class'\n\n.poodle-temp/run-549/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] - ValueError: Invalid Value for sort-bucket='class'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 18 passed in 0.25s =========================\n\n"}, "duration": 0.5056231021881104}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 57, "end_lineno": 15, "end_col_offset": 67, "text": "'XXfunctionXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", \"package\", \"module\", \"class\", 'XXfunctionXX', \"parent\", \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] FAILED [ 11%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_bucket[getoption4-getini4-function] ______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'function'}, expected = 'function'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-550/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='function'\n\n.poodle-temp/run-550/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] - ValueError: Invalid Value for sort-bucket='function'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 19 passed in 0.43s =========================\n\n"}, "duration": 0.8076691627502441}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 69, "end_lineno": 15, "end_col_offset": 77, "text": "'XXparentXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", 'XXparentXX', \"grandparent\"]\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-551/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-551/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-551/src/pytest_sort/config.py\", line 78, in _bucket_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket='parent'\n"}, "duration": 0.35436367988586426}, {"mutant": {"mutator_name": "String", "lineno": 15, "col_offset": 79, "end_lineno": 15, "end_col_offset": 92, "text": "'XXgrandparentXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:15\n@@ -12,7 +12,7 @@\n import pytest\n \n modes = [\"ordered\", \"reverse\", \"md5\", \"random\", \"fastest\", \"diffcov\", \"mutcov\"]\n-bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n+bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", 'XXgrandparentXX']\n \n legacy_modes = {\n \"none\": \"ordered\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] FAILED [ 12%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_bucket[getoption6-getini6-grandparent] ____\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'grandparent'}\nexpected = 'grandparent'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-552/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='grandparent'\n\n.poodle-temp/run-552/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] - ValueError: Invalid Value for sort-bucket='grandparent'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 21 passed in 0.27s =========================\n\n"}, "duration": 0.5214667320251465}, {"mutant": {"mutator_name": "String", "lineno": 18, "col_offset": 4, "end_lineno": 18, "end_col_offset": 10, "text": "'XXnoneXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:18\n@@ -15,7 +15,7 @@\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n- \"none\": \"ordered\",\n+ 'XXnoneXX': \"ordered\",\n }\n legacy_bucket_types = {\n \"global\": \"session\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] FAILED [ 7%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption8-getini8-ordered] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'none'}, expected = 'ordered'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-553/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='none'\n\n.poodle-temp/run-553/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] - ValueError: Invalid Value for sort-mode='none'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 12 passed in 0.36s =========================\n\n"}, "duration": 0.7373318672180176}, {"mutant": {"mutator_name": "String", "lineno": 18, "col_offset": 12, "end_lineno": 18, "end_col_offset": 21, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:18\n@@ -15,7 +15,7 @@\n bucket_types = [\"session\", \"package\", \"module\", \"class\", \"function\", \"parent\", \"grandparent\"]\n \n legacy_modes = {\n- \"none\": \"ordered\",\n+ \"none\": 'XXorderedXX',\n }\n legacy_bucket_types = {\n \"global\": \"session\",\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] FAILED [ 7%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption8-getini8-ordered] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'none'}, expected = 'ordered'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:102: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-554/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-mode='XXorderedXX'\n\n.poodle-temp/run-554/src/pytest_sort/config.py:70: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] - ValueError: Invalid Value for sort-mode='XXorderedXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 12 passed in 0.37s =========================\n\n"}, "duration": 0.7373120784759521}, {"mutant": {"mutator_name": "String", "lineno": 21, "col_offset": 4, "end_lineno": 21, "end_col_offset": 12, "text": "'XXglobalXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:21\n@@ -18,7 +18,7 @@\n \"none\": \"ordered\",\n }\n legacy_bucket_types = {\n- \"global\": \"session\",\n+ 'XXglobalXX': \"session\",\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] FAILED [ 13%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption7-getini7-session] ______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'global'}, expected = 'session'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-555/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='global'\n\n.poodle-temp/run-555/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] - ValueError: Invalid Value for sort-bucket='global'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 22 passed in 0.28s =========================\n\n"}, "duration": 0.5273373126983643}, {"mutant": {"mutator_name": "String", "lineno": 21, "col_offset": 14, "end_lineno": 21, "end_col_offset": 23, "text": "'XXsessionXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:21\n@@ -18,7 +18,7 @@\n \"none\": \"ordered\",\n }\n legacy_bucket_types = {\n- \"global\": \"session\",\n+ \"global\": 'XXsessionXX',\n }\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] FAILED [ 13%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption7-getini7-session] ______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'global'}, expected = 'session'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:126: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-556/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise ValueError(msg)\nE ValueError: Invalid Value for sort-bucket='XXsessionXX'\n\n.poodle-temp/run-556/src/pytest_sort/config.py:78: ValueError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] - ValueError: Invalid Value for sort-bucket='XXsessionXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 22 passed in 0.44s =========================\n\n"}, "duration": 0.8171865940093994}, {"mutant": {"mutator_name": "String", "lineno": 28, "col_offset": 26, "end_lineno": 28, "end_col_offset": 35, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:28\n@@ -25,7 +25,7 @@\n class SortConfig:\n \"\"\"Statoc class for storing configuration of pytest_sort.\"\"\"\n \n- mode: ClassVar[str] = \"ordered\"\n+ mode: ClassVar[str] = 'XXorderedXX'\n bucket: ClassVar[str] = \"parent\"\n bucket_mode: ClassVar[str] = \"sort_mode\"\n record: ClassVar[bool | None] = None # pragma: no mutate\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_defaults FAILED [ 1%]\n\n=================================== FAILURES ===================================\n_________________________ TestSortConfig.test_defaults _________________________\n\nself = \n\n def test_defaults(self):\n> assert config.SortConfig.mode == \"ordered\"\nE AssertionError\n\ntest/test_config.py:35: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_defaults - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.15s ==========================\n\n"}, "duration": 0.40190792083740234}, {"mutant": {"mutator_name": "String", "lineno": 29, "col_offset": 28, "end_lineno": 29, "end_col_offset": 36, "text": "'XXparentXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:29\n@@ -26,7 +26,7 @@\n \"\"\"Statoc class for storing configuration of pytest_sort.\"\"\"\n \n mode: ClassVar[str] = \"ordered\"\n- bucket: ClassVar[str] = \"parent\"\n+ bucket: ClassVar[str] = 'XXparentXX'\n bucket_mode: ClassVar[str] = \"sort_mode\"\n record: ClassVar[bool | None] = None # pragma: no mutate\n reset: ClassVar[bool] = False\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-558/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-558/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-558/src/pytest_sort/config.py\", line 78, in _bucket_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket='XXparentXX'\n"}, "duration": 0.3480403423309326}, {"mutant": {"mutator_name": "String", "lineno": 30, "col_offset": 33, "end_lineno": 30, "end_col_offset": 44, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:30\n@@ -27,7 +27,7 @@\n \n mode: ClassVar[str] = \"ordered\"\n bucket: ClassVar[str] = \"parent\"\n- bucket_mode: ClassVar[str] = \"sort_mode\"\n+ bucket_mode: ClassVar[str] = 'XXsort_modeXX'\n record: ClassVar[bool | None] = None # pragma: no mutate\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-559/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-559/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-559/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='XXsort_modeXX'\n"}, "duration": 0.23590874671936035}, {"mutant": {"mutator_name": "String", "lineno": 55, "col_offset": 44, "end_lineno": 55, "end_col_offset": 62, "text": "'XXsort_reset_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:55\n@@ -52,7 +52,7 @@\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n \n- SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n+ SortConfig.reset = config.getoption('XXsort_reset_timesXX', default=False)\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n \n SortConfig._seed_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset FAILED [ 21%]\n\n=================================== FAILURES ===================================\n__________________ TestSortConfig.test_from_pytest_sort_reset __________________\n\nself = \n\n def test_from_pytest_sort_reset(self):\n pytest_config = self.PytestConfig({\"sort_reset_times\": True}, {})\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.reset is True\nE AssertionError\n\ntest/test_config.py:184: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_reset - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 37 passed in 0.57s =========================\n\n"}, "duration": 0.9455170631408691}, {"mutant": {"mutator_name": "String", "lineno": 56, "col_offset": 45, "end_lineno": 56, "end_col_offset": 64, "text": "'XXsort_report_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:56\n@@ -53,7 +53,7 @@\n SortConfig._record_from_pytest(config)\n \n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n- SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n+ SortConfig.report = config.getoption('XXsort_report_timesXX', default=False)\n \n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report FAILED [ 22%]\n\n=================================== FAILURES ===================================\n_________________ TestSortConfig.test_from_pytest_sort_report __________________\n\nself = \n\n def test_from_pytest_sort_report(self):\n pytest_config = self.PytestConfig({\"sort_report_times\": True}, {})\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.report is True\nE AssertionError\n\ntest/test_config.py:189: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_report - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 38 passed in 0.57s =========================\n\n"}, "duration": 0.947129487991333}, {"mutant": {"mutator_name": "String", "lineno": 61, "col_offset": 28, "end_lineno": 61, "end_col_offset": 40, "text": "'XXsort_debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:61\n@@ -58,7 +58,7 @@\n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n \n- if config.getoption(\"sort_debug\"):\n+ if config.getoption('XXsort_debugXX'):\n SortConfig.debug = True\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_debugXX'. Did you mean: 'sort_debug'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-562/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-562/src/pytest_sort/config.py\", line 61, in from_pytest\nINTERNALERROR> if config.getoption('XXsort_debugXX'):\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_debugXX'\n"}, "duration": 0.23843121528625488}, {"mutant": {"mutator_name": "String", "lineno": 66, "col_offset": 43, "end_lineno": 66, "end_col_offset": 54, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:66\n@@ -63,7 +63,7 @@\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n+ SortConfig.mode = config.getoption('XXsort_modeXX') or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_modeXX'. Did you mean: 'sort_mode'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-563/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-563/src/pytest_sort/config.py\", line 50, in from_pytest\nINTERNALERROR> SortConfig._mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-563/src/pytest_sort/config.py\", line 66, in _mode_from_pytest\nINTERNALERROR> SortConfig.mode = config.getoption('XXsort_modeXX') or config.getini(\"sort_mode\") or SortConfig.mode\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_modeXX'\n"}, "duration": 0.2667367458343506}, {"mutant": {"mutator_name": "String", "lineno": 66, "col_offset": 73, "end_lineno": 66, "end_col_offset": 84, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:66\n@@ -63,7 +63,7 @@\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n+ SortConfig.mode = config.getoption(\"sort_mode\") or config.getini('XXsort_modeXX') or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption2-getini2-reverse] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'reverse'}, expected = 'reverse'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.mode == expected\nE AssertionError\n\ntest/test_config.py:103: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.17s ==========================\n\n"}, "duration": 0.41599178314208984}, {"mutant": {"mutator_name": "String", "lineno": 69, "col_offset": 20, "end_lineno": 69, "end_col_offset": 49, "text": "\"XXInvalid Value for sort-mode='XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:69\n@@ -66,7 +66,7 @@\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n- msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n+ msg = f\"\"XXInvalid Value for sort-mode='XX\"{SortConfig.mode}'\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-565/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-565/src/pytest_sort/config.py\", line 69\n msg = f\"\"XXInvalid Value for sort-mode='XX\"{SortConfig.mode}'\"\n ^\nSyntaxError: unterminated string literal (detected at line 69)\n"}, "duration": 0.2762451171875}, {"mutant": {"mutator_name": "String", "lineno": 69, "col_offset": 66, "end_lineno": 69, "end_col_offset": 67, "text": "\"XX'XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:69\n@@ -66,7 +66,7 @@\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n- msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n+ msg = f\"Invalid Value for sort-mode='{SortConfig.mode}\"XX'XX\"\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-566/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-566/src/pytest_sort/config.py\", line 69\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}\"XX'XX\"\"\n ^\nSyntaxError: unterminated string literal (detected at line 69)\n"}, "duration": 0.2759084701538086}, {"mutant": {"mutator_name": "String", "lineno": 74, "col_offset": 45, "end_lineno": 74, "end_col_offset": 58, "text": "'XXsort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:74\n@@ -71,7 +71,7 @@\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n+ SortConfig.bucket = config.getoption('XXsort_bucketXX') or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_bucketXX'. Did you mean: 'sort_bucket'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-567/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-567/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-567/src/pytest_sort/config.py\", line 74, in _bucket_from_pytest\nINTERNALERROR> SortConfig.bucket = config.getoption('XXsort_bucketXX') or config.getini(\"sort_bucket\") or SortConfig.bucket\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_bucketXX'\n"}, "duration": 0.24343442916870117}, {"mutant": {"mutator_name": "String", "lineno": 74, "col_offset": 77, "end_lineno": 74, "end_col_offset": 90, "text": "'XXsort_bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:74\n@@ -71,7 +71,7 @@\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n+ SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini('XXsort_bucketXX') or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_bucketXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_bucketXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-568/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-568/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-568/src/pytest_sort/config.py\", line 74, in _bucket_from_pytest\nINTERNALERROR> SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini('XXsort_bucketXX') or SortConfig.bucket\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXsort_bucketXX'\n"}, "duration": 0.3475639820098877}, {"mutant": {"mutator_name": "String", "lineno": 77, "col_offset": 20, "end_lineno": 77, "end_col_offset": 51, "text": "\"XXInvalid Value for sort-bucket='XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:77\n@@ -74,7 +74,7 @@\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n- msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n+ msg = f\"\"XXInvalid Value for sort-bucket='XX\"{SortConfig.bucket}'\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-569/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-569/src/pytest_sort/config.py\", line 77\n msg = f\"\"XXInvalid Value for sort-bucket='XX\"{SortConfig.bucket}'\"\n ^\nSyntaxError: unterminated string literal (detected at line 77)\n"}, "duration": 0.2795443534851074}, {"mutant": {"mutator_name": "String", "lineno": 77, "col_offset": 70, "end_lineno": 77, "end_col_offset": 71, "text": "\"XX'XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:77\n@@ -74,7 +74,7 @@\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n- msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n+ msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}\"XX'XX\"\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-570/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-570/src/pytest_sort/config.py\", line 77\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}\"XX'XX\"\"\n ^\nSyntaxError: unterminated string literal (detected at line 77)\n"}, "duration": 0.18354225158691406}, {"mutant": {"mutator_name": "String", "lineno": 83, "col_offset": 29, "end_lineno": 83, "end_col_offset": 47, "text": "'XXsort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:83\n@@ -80,7 +80,7 @@\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n+ config.getoption('XXsort_bucket_modeXX') or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_bucket_modeXX'. Did you mean: 'sort_bucket_mode'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-571/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-571/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-571/src/pytest_sort/config.py\", line 83, in _bucket_mode_from_pytest\nINTERNALERROR> config.getoption('XXsort_bucket_modeXX') or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_bucket_modeXX'\n"}, "duration": 0.3452639579772949}, {"mutant": {"mutator_name": "String", "lineno": 83, "col_offset": 66, "end_lineno": 83, "end_col_offset": 84, "text": "'XXsort_bucket_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:83\n@@ -80,7 +80,7 @@\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n+ config.getoption(\"sort_bucket_mode\") or config.getini('XXsort_bucket_modeXX') or SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_bucket_modeXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_bucket_modeXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-572/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-572/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-572/src/pytest_sort/config.py\", line 83, in _bucket_mode_from_pytest\nINTERNALERROR> config.getoption(\"sort_bucket_mode\") or config.getini('XXsort_bucket_modeXX') or SortConfig.bucket_mode\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXsort_bucket_modeXX'\n"}, "duration": 0.236037015914917}, {"mutant": {"mutator_name": "String", "lineno": 85, "col_offset": 37, "end_lineno": 85, "end_col_offset": 48, "text": "'XXsort_modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:85\n@@ -82,7 +82,7 @@\n SortConfig.bucket_mode = (\n config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n )\n- if SortConfig.bucket_mode == \"sort_mode\":\n+ if SortConfig.bucket_mode == 'XXsort_modeXX':\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-573/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-573/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-573/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='sort_mode'\n"}, "duration": 0.3243579864501953}, {"mutant": {"mutator_name": "String", "lineno": 89, "col_offset": 20, "end_lineno": 89, "end_col_offset": 56, "text": "\"XXInvalid Value for sort-bucket-mode='XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:89\n@@ -86,7 +86,7 @@\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n- msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n+ msg = f\"\"XXInvalid Value for sort-bucket-mode='XX\"{SortConfig.bucket_mode}'\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-574/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-574/src/pytest_sort/config.py\", line 89\n msg = f\"\"XXInvalid Value for sort-bucket-mode='XX\"{SortConfig.bucket_mode}'\"\n ^\nSyntaxError: unterminated string literal (detected at line 89)\n"}, "duration": 0.2561979293823242}, {"mutant": {"mutator_name": "String", "lineno": 89, "col_offset": 80, "end_lineno": 89, "end_col_offset": 81, "text": "\"XX'XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:89\n@@ -86,7 +86,7 @@\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n- msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n+ msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}\"XX'XX\"\"\n raise ValueError(msg)\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-575/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-575/src/pytest_sort/config.py\", line 89\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}\"XX'XX\"\"\n ^\nSyntaxError: unterminated string literal (detected at line 89)\n"}, "duration": 0.2804684638977051}, {"mutant": {"mutator_name": "String", "lineno": 94, "col_offset": 28, "end_lineno": 94, "end_col_offset": 44, "text": "'XXsort_no_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:94\n@@ -91,7 +91,7 @@\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n+ if config.getoption('XXsort_no_recordXX') and config.getoption(\"sort_record\"):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_no_recordXX'. Did you mean: 'sort_no_record'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-576/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-576/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-576/src/pytest_sort/config.py\", line 94, in _record_from_pytest\nINTERNALERROR> if config.getoption('XXsort_no_recordXX') and config.getoption(\"sort_record\"):\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_no_recordXX'\n"}, "duration": 0.24130034446716309}, {"mutant": {"mutator_name": "String", "lineno": 94, "col_offset": 67, "end_lineno": 94, "end_col_offset": 80, "text": "'XXsort_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:94\n@@ -91,7 +91,7 @@\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n+ if config.getoption(\"sort_no_record\") and config.getoption('XXsort_recordXX'):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n> with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\nE Failed: DID NOT RAISE \n\ntest/test_config.py:163: Failed\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - Failed: DID NOT RAISE \n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.52s =========================\n\n"}, "duration": 0.8986172676086426}, {"mutant": {"mutator_name": "String", "lineno": 95, "col_offset": 29, "end_lineno": 95, "end_col_offset": 93, "text": "'XXDo not use both --sort-record-times and --sort-no-record-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:95\n@@ -92,7 +92,7 @@\n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n- raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n+ raise ValueError('XXDo not use both --sort-record-times and --sort-no-record-timesXX')\n \n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:164: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-578/src/pytest_sort/config.py:53: in from_pytest\n SortConfig._record_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n> raise ValueError('XXDo not use both --sort-record-times and --sort-no-record-timesXX')\nE ValueError: XXDo not use both --sort-record-times and --sort-no-record-timesXX\n\n.poodle-temp/run-578/src/pytest_sort/config.py:95: ValueError\n\nDuring handling of the above exception, another exception occurred:\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n> with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\nE AssertionError: Regex pattern did not match.\nE Regex: '^Do not use both --sort-record-times and --sort-no-record-times$'\nE Input: 'XXDo not use both --sort-record-times and --sort-no-record-timesXX'\n\ntest/test_config.py:163: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - AssertionError: Regex pattern did not match.\n Regex: '^Do not use both --sort-record-times and --sort-no-record-times$'\n Input: 'XXDo not use both --sort-record-times and --sort-no-record-timesXX'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6457958221435547}, {"mutant": {"mutator_name": "String", "lineno": 97, "col_offset": 28, "end_lineno": 97, "end_col_offset": 44, "text": "'XXsort_no_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:97\n@@ -94,7 +94,7 @@\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n- if config.getoption(\"sort_no_record\"):\n+ if config.getoption('XXsort_no_recordXX'):\n SortConfig.record = False\n else:\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_no_recordXX'. Did you mean: 'sort_no_record'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-579/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-579/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-579/src/pytest_sort/config.py\", line 97, in _record_from_pytest\nINTERNALERROR> if config.getoption('XXsort_no_recordXX'):\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_no_recordXX'\n"}, "duration": 0.23511338233947754}, {"mutant": {"mutator_name": "String", "lineno": 100, "col_offset": 49, "end_lineno": 100, "end_col_offset": 62, "text": "'XXsort_recordXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:100\n@@ -97,7 +97,7 @@\n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n+ SortConfig.record = config.getoption('XXsort_recordXX') or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_recordXX'. Did you mean: 'sort_record'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-580/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-580/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-580/src/pytest_sort/config.py\", line 100, in _record_from_pytest\nINTERNALERROR> SortConfig.record = config.getoption('XXsort_recordXX') or config.getini(\"sort_record_times\")\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_recordXX'\n"}, "duration": 0.2369534969329834}, {"mutant": {"mutator_name": "String", "lineno": 100, "col_offset": 81, "end_lineno": 100, "end_col_offset": 100, "text": "'XXsort_record_timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:100\n@@ -97,7 +97,7 @@\n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n+ SortConfig.record = config.getoption(\"sort_record\") or config.getini('XXsort_record_timesXX')\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_record_timesXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_record_timesXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-581/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-581/src/pytest_sort/config.py\", line 53, in from_pytest\nINTERNALERROR> SortConfig._record_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-581/src/pytest_sort/config.py\", line 100, in _record_from_pytest\nINTERNALERROR> SortConfig.record = config.getoption(\"sort_record\") or config.getini('XXsort_record_timesXX')\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXsort_record_timesXX'\n"}, "duration": 0.23433804512023926}, {"mutant": {"mutator_name": "String", "lineno": 104, "col_offset": 30, "end_lineno": 104, "end_col_offset": 39, "text": "'XXfastestXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:104\n@@ -101,7 +101,7 @@\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n- if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n+ if SortConfig.mode == 'XXfastestXX' and SortConfig.record is None:\n SortConfig.record = True\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] FAILED [ 21%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption4-getini4-True] _____\n\nself = \ngetoption = {'sort_mode': 'fastest'}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 36 passed in 0.47s =========================\n\n"}, "duration": 0.7889754772186279}, {"mutant": {"mutator_name": "String", "lineno": 109, "col_offset": 43, "end_lineno": 109, "end_col_offset": 54, "text": "'XXsort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:109\n@@ -106,7 +106,7 @@\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n+ SortConfig.seed = config.getoption('XXsort_seedXX') or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_seedXX'. Did you mean: 'sort_seed'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-583/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-583/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-583/src/pytest_sort/config.py\", line 109, in _seed_from_pytest\nINTERNALERROR> SortConfig.seed = config.getoption('XXsort_seedXX') or config.getini(\"sort_seed\") or SortConfig.seed\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_seedXX'\n"}, "duration": 0.3217787742614746}, {"mutant": {"mutator_name": "String", "lineno": 109, "col_offset": 73, "end_lineno": 109, "end_col_offset": 84, "text": "'XXsort_seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:109\n@@ -106,7 +106,7 @@\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n+ SortConfig.seed = config.getoption(\"sort_seed\") or config.getini('XXsort_seedXX') or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_seedXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_seedXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-584/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-584/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-584/src/pytest_sort/config.py\", line 109, in _seed_from_pytest\nINTERNALERROR> SortConfig.seed = config.getoption(\"sort_seed\") or config.getini('XXsort_seedXX') or SortConfig.seed\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXsort_seedXX'\n"}, "duration": 0.3052186965942383}, {"mutant": {"mutator_name": "String", "lineno": 111, "col_offset": 20, "end_lineno": 111, "end_col_offset": 40, "text": "\"XXInvalid seed value 'XX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:111\n@@ -108,7 +108,7 @@\n def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n- msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n+ msg = f\"\"XXInvalid seed value 'XX\"{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-585/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-585/src/pytest_sort/config.py\", line 111\n msg = f\"\"XXInvalid seed value 'XX\"{SortConfig.seed}' must be int\"\n ^\nSyntaxError: unterminated string literal (detected at line 111)\n"}, "duration": 0.2137162685394287}, {"mutant": {"mutator_name": "String", "lineno": 111, "col_offset": 57, "end_lineno": 111, "end_col_offset": 70, "text": "\"XX' must be intXX\"", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:111\n@@ -108,7 +108,7 @@\n def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n- msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n+ msg = f\"Invalid seed value '{SortConfig.seed}\"XX' must be intXX\"\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-586/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-586/src/pytest_sort/config.py\", line 111\n msg = f\"Invalid seed value '{SortConfig.seed}\"XX' must be intXX\"\"\n ^\nSyntaxError: unterminated string literal (detected at line 111)\n"}, "duration": 0.2841339111328125}, {"mutant": {"mutator_name": "String", "lineno": 117, "col_offset": 41, "end_lineno": 117, "end_col_offset": 56, "text": "'XXsort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = config.getoption('XXsort_datafileXX') or config.getini(\"sort_datafile\") or None\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1611, in getoption\nINTERNALERROR> val = getattr(self.option, name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'Namespace' object has no attribute 'XXsort_datafileXX'. Did you mean: 'sort_datafile'?\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-587/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-587/src/pytest_sort/config.py\", line 59, in from_pytest\nINTERNALERROR> SortConfig._database_file_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-587/src/pytest_sort/config.py\", line 117, in _database_file_from_pytest\nINTERNALERROR> database_file = config.getoption('XXsort_datafileXX') or config.getini(\"sort_datafile\") or None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1622, in getoption\nINTERNALERROR> raise ValueError(f\"no option named {name!r}\") from e\nINTERNALERROR> ValueError: no option named 'XXsort_datafileXX'\n"}, "duration": 0.27519845962524414}, {"mutant": {"mutator_name": "String", "lineno": 117, "col_offset": 75, "end_lineno": 117, "end_col_offset": 90, "text": "'XXsort_datafileXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = config.getoption(\"sort_datafile\") or config.getini('XXsort_datafileXX') or None\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1495, in getini\nINTERNALERROR> return self._inicache[name]\nINTERNALERROR> ~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_datafileXX'\nINTERNALERROR> \nINTERNALERROR> During handling of the above exception, another exception occurred:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1508, in _getini\nINTERNALERROR> description, type, default = self._parser._inidict[name]\nINTERNALERROR> ~~~~~~~~~~~~~~~~~~~~~^^^^^^\nINTERNALERROR> KeyError: 'XXsort_datafileXX'\nINTERNALERROR> \nINTERNALERROR> The above exception was the direct cause of the following exception:\nINTERNALERROR> \nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-588/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-588/src/pytest_sort/config.py\", line 59, in from_pytest\nINTERNALERROR> SortConfig._database_file_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-588/src/pytest_sort/config.py\", line 117, in _database_file_from_pytest\nINTERNALERROR> database_file = config.getoption(\"sort_datafile\") or config.getini('XXsort_datafileXX') or None\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1497, in getini\nINTERNALERROR> self._inicache[name] = val = self._getini(name)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1510, in _getini\nINTERNALERROR> raise ValueError(f\"unknown configuration value: {name!r}\") from e\nINTERNALERROR> ValueError: unknown configuration value: 'XXsort_datafileXX'\n"}, "duration": 0.23906302452087402}, {"mutant": {"mutator_name": "String", "lineno": 128, "col_offset": 12, "end_lineno": 128, "end_col_offset": 23, "text": "'XXsort-modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:128\n@@ -125,7 +125,7 @@\n Skips settings that are not currently in use.\n \"\"\"\n config: dict[str, Any] = {\n- \"sort-mode\": SortConfig.mode,\n+ 'XXsort-modeXX': SortConfig.mode,\n }\n \n if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n XXsort-modeXX: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6294605731964111}, {"mutant": {"mutator_name": "String", "lineno": 131, "col_offset": 35, "end_lineno": 131, "end_col_offset": 44, "text": "'XXorderedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:131\n@@ -128,7 +128,7 @@\n \"sort-mode\": SortConfig.mode,\n }\n \n- if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n+ if SortConfig.mode not in ('XXorderedXX', \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket\"] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestDict.test_header_dict_default _______________________\n\nself = \n\n def test_header_dict_default(self):\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n }\nE AssertionError\n\ntest/test_config.py:246: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.590071439743042}, {"mutant": {"mutator_name": "String", "lineno": 131, "col_offset": 46, "end_lineno": 131, "end_col_offset": 55, "text": "'XXreverseXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:131\n@@ -128,7 +128,7 @@\n \"sort-mode\": SortConfig.mode,\n }\n \n- if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n+ if SortConfig.mode not in (\"ordered\", 'XXreverseXX') or SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket\"] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 0%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 1%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 1%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_____________ TestDict.test_header_dict_sort_bucket_reverse_match ______________\n\nself = \n\n def test_header_dict_sort_bucket_reverse_match(self):\n config.SortConfig.bucket = \"module\"\n config.SortConfig.mode = \"reverse\"\n config.SortConfig.bucket_mode = \"reverse\"\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"reverse\",\n }\nE AssertionError\n\ntest/test_config.py:272: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.15s ==========================\n\n"}, "duration": 0.398712158203125}, {"mutant": {"mutator_name": "String", "lineno": 132, "col_offset": 19, "end_lineno": 132, "end_col_offset": 32, "text": "'XXsort-bucketXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:132\n@@ -129,7 +129,7 @@\n }\n \n if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket\"] = SortConfig.bucket\n+ config['XXsort-bucketXX'] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n XXsort-bucketXX: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestDict.test_header_dict_sort_bucket_ordered_mismatch ____________\n\nself = \n\n def test_header_dict_sort_bucket_ordered_mismatch(self):\n config.SortConfig.bucket = \"module\"\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"reverse\"\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n \"sort-bucket\": \"module\",\n \"sort-bucket-mode\": \"reverse\",\n }\nE AssertionError\n\ntest/test_config.py:262: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6292645931243896}, {"mutant": {"mutator_name": "String", "lineno": 135, "col_offset": 19, "end_lineno": 135, "end_col_offset": 37, "text": "'XXsort-bucket-modeXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:135\n@@ -132,7 +132,7 @@\n config[\"sort-bucket\"] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n+ config['XXsort-bucket-modeXX'] = SortConfig.bucket_mode\n \n if SortConfig.mode == \"random\":\n config[\"sort-seed\"] = SortConfig.seed\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n____________ TestDict.test_header_dict_sort_bucket_ordered_mismatch ____________\n\nself = \n\n def test_header_dict_sort_bucket_ordered_mismatch(self):\n config.SortConfig.bucket = \"module\"\n config.SortConfig.mode = \"ordered\"\n config.SortConfig.bucket_mode = \"reverse\"\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"ordered\",\n \"sort-bucket\": \"module\",\n \"sort-bucket-mode\": \"reverse\",\n }\nE AssertionError\n\ntest/test_config.py:262: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6247987747192383}, {"mutant": {"mutator_name": "String", "lineno": 137, "col_offset": 30, "end_lineno": 137, "end_col_offset": 38, "text": "'XXrandomXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:137\n@@ -134,7 +134,7 @@\n if SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n \n- if SortConfig.mode == \"random\":\n+ if SortConfig.mode == 'XXrandomXX':\n config[\"sort-seed\"] = SortConfig.seed\n \n if SortConfig.reset:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 0%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 1%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 1%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 2%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 2%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 3%]\ntest/test_config.py::TestDict::test_header_dict_random FAILED [ 4%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_random _______________________\n\nself = \n\n def test_header_dict_random(self):\n config.SortConfig.mode = \"random\"\n config.SortConfig.bucket_mode = \"random\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.seed = 1234\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n \"sort-seed\": 1234,\n }\nE AssertionError\n\ntest/test_config.py:300: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_random - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 6 passed in 0.16s ==========================\n\n"}, "duration": 0.40211963653564453}, {"mutant": {"mutator_name": "String", "lineno": 138, "col_offset": 19, "end_lineno": 138, "end_col_offset": 30, "text": "'XXsort-seedXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:138\n@@ -135,7 +135,7 @@\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n \n if SortConfig.mode == \"random\":\n- config[\"sort-seed\"] = SortConfig.seed\n+ config['XXsort-seedXX'] = SortConfig.seed\n \n if SortConfig.reset:\n config[\"sort-reset-times\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_random FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_random _______________________\n\nself = \n\n def test_header_dict_random(self):\n config.SortConfig.mode = \"random\"\n config.SortConfig.bucket_mode = \"random\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.seed = 1234\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"random\",\n \"sort-bucket\": \"module\",\n \"sort-seed\": 1234,\n }\nE AssertionError\n\ntest/test_config.py:300: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_random - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.3977339267730713}, {"mutant": {"mutator_name": "String", "lineno": 141, "col_offset": 19, "end_lineno": 141, "end_col_offset": 37, "text": "'XXsort-reset-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:141\n@@ -138,7 +138,7 @@\n config[\"sort-seed\"] = SortConfig.seed\n \n if SortConfig.reset:\n- config[\"sort-reset-times\"] = True\n+ config['XXsort-reset-timesXX'] = True\n \n if SortConfig.record is not None:\n config[\"sort-record-times\"] = SortConfig.record\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_reset FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_reset ________________________\n\nself = \n\n def test_header_dict_reset(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.reset = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-reset-times\": True,\n }\nE AssertionError\n\ntest/test_config.py:311: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_reset - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6387817859649658}, {"mutant": {"mutator_name": "String", "lineno": 144, "col_offset": 19, "end_lineno": 144, "end_col_offset": 38, "text": "'XXsort-record-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:144\n@@ -141,7 +141,7 @@\n config[\"sort-reset-times\"] = True\n \n if SortConfig.record is not None:\n- config[\"sort-record-times\"] = SortConfig.record\n+ config['XXsort-record-timesXX'] = SortConfig.record\n \n if SortConfig.report:\n config[\"sort-report-times\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_record FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_record _______________________\n\nself = \n\n def test_header_dict_record(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.record = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-record-times\": True,\n }\nE AssertionError\n\ntest/test_config.py:322: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_record - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6297669410705566}, {"mutant": {"mutator_name": "String", "lineno": 147, "col_offset": 19, "end_lineno": 147, "end_col_offset": 38, "text": "'XXsort-report-timesXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:147\n@@ -144,7 +144,7 @@\n config[\"sort-record-times\"] = SortConfig.record\n \n if SortConfig.report:\n- config[\"sort-report-times\"] = True\n+ config['XXsort-report-timesXX'] = True\n \n if SortConfig.debug:\n config[\"sort-debug\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_report FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_report _______________________\n\nself = \n\n def test_header_dict_report(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.report = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-report-times\": True,\n }\nE AssertionError\n\ntest/test_config.py:333: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_report - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.39299750328063965}, {"mutant": {"mutator_name": "String", "lineno": 150, "col_offset": 19, "end_lineno": 150, "end_col_offset": 31, "text": "'XXsort-debugXX'", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:150\n@@ -147,6 +147,6 @@\n config[\"sort-report-times\"] = True\n \n if SortConfig.debug:\n- config[\"sort-debug\"] = True\n+ config['XXsort-debugXX'] = True\n \n return config\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestDict::test_header_dict_debug FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_______________________ TestDict.test_header_dict_debug ________________________\n\nself = \n\n def test_header_dict_debug(self):\n config.SortConfig.mode = \"fastest\"\n config.SortConfig.bucket_mode = \"fastest\"\n config.SortConfig.bucket = \"module\"\n config.SortConfig.debug = True\n> assert config.SortConfig.header_dict() == {\n \"sort-mode\": \"fastest\",\n \"sort-bucket\": \"module\",\n \"sort-debug\": True,\n }\nE AssertionError\n\ntest/test_config.py:344: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestDict::test_header_dict_debug - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.621575117111206}, {"mutant": {"mutator_name": "FuncCall", "lineno": 35, "col_offset": 26, "end_lineno": 35, "end_col_offset": 54, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:35\n@@ -32,7 +32,7 @@\n reset: ClassVar[bool] = False\n report: ClassVar[bool] = False\n \n- seed: ClassVar[int] = random.randint(0, 1_000_000)\n+ seed: ClassVar[int] = None\n \n debug: ClassVar[bool] = False\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-600/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-600/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-600/src/pytest_sort/config.py\", line 112, in _seed_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid seed value 'None' must be int\n"}, "duration": 0.23069453239440918}, {"mutant": {"mutator_name": "FuncCall", "lineno": 50, "col_offset": 8, "end_lineno": 50, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:50\n@@ -47,7 +47,7 @@\n @staticmethod\n def from_pytest(config: pytest.Config) -> None:\n \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n- SortConfig._mode_from_pytest(config)\n+ None\n SortConfig._bucket_from_pytest(config)\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: ordered\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_mode[getoption0-getini0-md5] _________\n\nself = \ngetoption = {'sort_mode': 'md5'}, getini = {'sort_mode': 'random'}\nexpected = 'md5'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.mode == expected\nE AssertionError\n\ntest/test_config.py:103: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.22s ==========================\n\n"}, "duration": 0.5933477878570557}, {"mutant": {"mutator_name": "FuncCall", "lineno": 51, "col_offset": 8, "end_lineno": 51, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:51\n@@ -48,7 +48,7 @@\n def from_pytest(config: pytest.Config) -> None:\n \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n SortConfig._mode_from_pytest(config)\n- SortConfig._bucket_from_pytest(config)\n+ None\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption0-getini0-session] ______\n\nself = \ngetoption = {'sort_bucket': 'session'}, getini = {'sort_bucket': 'class'}\nexpected = 'session'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.bucket == expected\nE AssertionError\n\ntest/test_config.py:127: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 11 passed in 0.21s =========================\n\n"}, "duration": 0.4563603401184082}, {"mutant": {"mutator_name": "FuncCall", "lineno": 52, "col_offset": 8, "end_lineno": 52, "end_col_offset": 51, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:52\n@@ -49,7 +49,7 @@\n \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n SortConfig._mode_from_pytest(config)\n SortConfig._bucket_from_pytest(config)\n- SortConfig._bucket_mode_from_pytest(config)\n+ None\n SortConfig._record_from_pytest(config)\n \n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\n sort-bucket-mode: sort_mode\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-603/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-603/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-603/src/pytest_sort/core.py\", line 210, in create_sort_keys\nINTERNALERROR> bucket_key = bucket_sort_key or create_bucket_key[SortConfig.bucket_mode](bucket_id, idx, count)\nINTERNALERROR> ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> KeyError: 'sort_mode'\n\n============================ no tests ran in 0.19s =============================\n\n"}, "duration": 0.5655663013458252}, {"mutant": {"mutator_name": "FuncCall", "lineno": 53, "col_offset": 8, "end_lineno": 53, "end_col_offset": 46, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:53\n@@ -50,7 +50,7 @@\n SortConfig._mode_from_pytest(config)\n SortConfig._bucket_from_pytest(config)\n SortConfig._bucket_mode_from_pytest(config)\n- SortConfig._record_from_pytest(config)\n+ None\n \n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n> with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\nE Failed: DID NOT RAISE \n\ntest/test_config.py:163: Failed\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - Failed: DID NOT RAISE \n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.32s =========================\n\n"}, "duration": 0.593684196472168}, {"mutant": {"mutator_name": "FuncCall", "lineno": 55, "col_offset": 27, "end_lineno": 55, "end_col_offset": 78, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:55\n@@ -52,7 +52,7 @@\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n \n- SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n+ SortConfig.reset = None\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n \n SortConfig._seed_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n> assert config.SortConfig.reset is False\nE AssertionError\n\ntest/test_config.py:79: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6252841949462891}, {"mutant": {"mutator_name": "FuncCall", "lineno": 56, "col_offset": 28, "end_lineno": 56, "end_col_offset": 80, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:56\n@@ -53,7 +53,7 @@\n SortConfig._record_from_pytest(config)\n \n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n- SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n+ SortConfig.report = None\n \n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n> assert config.SortConfig.report is False\nE AssertionError\n\ntest/test_config.py:80: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6246030330657959}, {"mutant": {"mutator_name": "FuncCall", "lineno": 58, "col_offset": 8, "end_lineno": 58, "end_col_offset": 44, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:58\n@@ -55,7 +55,7 @@\n SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n \n- SortConfig._seed_from_pytest(config)\n+ None\n SortConfig._database_file_from_pytest(config)\n \n if config.getoption(\"sort_debug\"):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] FAILED [ 23%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_seed_getoption[getoption0-getini0-123] ____\n\nself = \ngetoption = {'sort_seed': '123'}, getini = {'sort_seed': '456'}, expected = 123\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_seed\": \"123\"}, {\"sort_seed\": \"456\"}, 123),\n ({}, {\"sort_seed\": \"456\"}, 456),\n ],\n )\n def test_from_pytest_seed_getoption(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.seed == expected\nE AssertionError\n\ntest/test_config.py:201: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 39 passed in 0.35s =========================\n\n"}, "duration": 0.6049294471740723}, {"mutant": {"mutator_name": "FuncCall", "lineno": 59, "col_offset": 8, "end_lineno": 59, "end_col_offset": 53, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:59\n@@ -56,7 +56,7 @@\n SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n \n SortConfig._seed_from_pytest(config)\n- SortConfig._database_file_from_pytest(config)\n+ None\n \n if config.getoption(\"sort_debug\"):\n SortConfig.debug = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] FAILED [ 24%]\n\n=================================== FAILURES ===================================\n_ TestSortConfig.test_from_pytest_database_file_default[getoption1-getini1-expected1] _\n\nself = \ngetoption = {'sort_datafile': './tests/.sort_db'}\ngetini = {'sort_datafile': './tests/.sort'}\nexpected = PosixPath('/home/runner/work/pytest-sort/pytest-sort/tests/.sort_db')\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({}, {}, Path.cwd() / \".pytest_sort_data\"),\n (\n {\"sort_datafile\": \"./tests/.sort_db\"},\n {\"sort_datafile\": \"./tests/.sort\"},\n Path.cwd() / \"tests\" / \".sort_db\",\n ),\n ({}, {\"sort_datafile\": \"./tests/.sort\"}, Path.cwd() / \"tests\" / \".sort\"),\n ],\n )\n def test_from_pytest_database_file_default(self, getoption, getini, expected: Path):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert database.database_file.absolute() == expected.absolute()\nE AssertionError\n\ntest/test_config.py:223: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 42 passed in 0.48s =========================\n\n"}, "duration": 0.8361771106719971}, {"mutant": {"mutator_name": "FuncCall", "lineno": 61, "col_offset": 11, "end_lineno": 61, "end_col_offset": 41, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:61\n@@ -58,7 +58,7 @@\n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n \n- if config.getoption(\"sort_debug\"):\n+ if None:\n SortConfig.debug = True\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] FAILED [ 26%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_sort_debug[getoption1-True] __________\n\nself = \ngetoption = {'sort_debug': True}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"expected\"),\n [\n ({}, False),\n ({\"sort_debug\": True}, True),\n ({\"sort_debug\": False}, False),\n ],\n )\n def test_from_pytest_sort_debug(self, getoption, expected):\n pytest_config = self.PytestConfig(getoption, {})\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.debug == expected\nE AssertionError\n\ntest/test_config.py:236: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 45 passed in 0.57s =========================\n\n"}, "duration": 0.9571642875671387}, {"mutant": {"mutator_name": "FuncCall", "lineno": 66, "col_offset": 26, "end_lineno": 66, "end_col_offset": 55, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:66\n@@ -63,7 +63,7 @@\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n+ SortConfig.mode = None or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: ordered\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_________ TestSortConfig.test_from_pytest_mode[getoption0-getini0-md5] _________\n\nself = \ngetoption = {'sort_mode': 'md5'}, getini = {'sort_mode': 'random'}\nexpected = 'md5'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.mode == expected\nE AssertionError\n\ntest/test_config.py:103: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 4 passed in 0.22s ==========================\n\n"}, "duration": 0.5670945644378662}, {"mutant": {"mutator_name": "FuncCall", "lineno": 66, "col_offset": 59, "end_lineno": 66, "end_col_offset": 85, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:66\n@@ -63,7 +63,7 @@\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n+ SortConfig.mode = config.getoption(\"sort_mode\") or None or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] FAILED [ 2%]\n\n=================================== FAILURES ===================================\n_______ TestSortConfig.test_from_pytest_mode[getoption2-getini2-reverse] _______\n\nself = \ngetoption = {}, getini = {'sort_mode': 'reverse'}, expected = 'reverse'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_mode\": \"md5\"}, {\"sort_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ],\n )\n def test_from_pytest_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.mode == expected\nE AssertionError\n\ntest/test_config.py:103: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.22s ==========================\n\n"}, "duration": 0.45882511138916016}, {"mutant": {"mutator_name": "FuncCall", "lineno": 67, "col_offset": 26, "end_lineno": 67, "end_col_offset": 76, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:67\n@@ -64,7 +64,7 @@\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n- SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n+ SortConfig.mode = None\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-612/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-612/src/pytest_sort/config.py\", line 50, in from_pytest\nINTERNALERROR> SortConfig._mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-612/src/pytest_sort/config.py\", line 70, in _mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-mode='None'\n"}, "duration": 0.35428643226623535}, {"mutant": {"mutator_name": "FuncCall", "lineno": 70, "col_offset": 18, "end_lineno": 70, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:70\n@@ -67,7 +67,7 @@\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n- raise ValueError(msg)\n+ raise None\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestSortConfig.test_from_pytest_mode_invalid _________________\n\nself = \n\n def test_from_pytest_mode_invalid(self):\n pytest_config = self.PytestConfig({\"sort_mode\": \"September\"}, {})\n with pytest.raises(ValueError, match=\"^Invalid Value for sort-mode='September'$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:108: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-613/src/pytest_sort/config.py:50: in from_pytest\n SortConfig._mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-613/src/pytest_sort/config.py:70: TypeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_mode_invalid - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5901761054992676}, {"mutant": {"mutator_name": "FuncCall", "lineno": 74, "col_offset": 28, "end_lineno": 74, "end_col_offset": 59, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:74\n@@ -71,7 +71,7 @@\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n+ SortConfig.bucket = None or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] FAILED [ 6%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption0-getini0-session] ______\n\nself = \ngetoption = {'sort_bucket': 'session'}, getini = {'sort_bucket': 'class'}\nexpected = 'session'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.bucket == expected\nE AssertionError\n\ntest/test_config.py:127: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 11 passed in 0.21s =========================\n\n"}, "duration": 0.4549078941345215}, {"mutant": {"mutator_name": "FuncCall", "lineno": 74, "col_offset": 63, "end_lineno": 74, "end_col_offset": 91, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:74\n@@ -71,7 +71,7 @@\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n+ SortConfig.bucket = config.getoption(\"sort_bucket\") or None or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] FAILED [ 7%]\n\n=================================== FAILURES ===================================\n______ TestSortConfig.test_from_pytest_bucket[getoption1-getini1-package] ______\n\nself = \ngetoption = {}, getini = {'sort_bucket': 'package'}, expected = 'package'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket\": \"session\"}, {\"sort_bucket\": \"class\"}, \"session\"),\n ({}, {\"sort_bucket\": \"package\"}, \"package\"),\n ({}, {\"sort_bucket\": \"module\"}, \"module\"),\n ({}, {\"sort_bucket\": \"class\"}, \"class\"),\n ({}, {\"sort_bucket\": \"function\"}, \"function\"),\n ({}, {\"sort_bucket\": \"parent\"}, \"parent\"),\n ({}, {\"sort_bucket\": \"grandparent\"}, \"grandparent\"),\n ({}, {\"sort_bucket\": \"global\"}, \"session\"),\n ({}, {}, \"parent\"),\n ],\n )\n def test_from_pytest_bucket(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.bucket == expected\nE AssertionError\n\ntest/test_config.py:127: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 12 passed in 0.26s =========================\n\n"}, "duration": 0.6256124973297119}, {"mutant": {"mutator_name": "FuncCall", "lineno": 75, "col_offset": 28, "end_lineno": 75, "end_col_offset": 89, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:75\n@@ -72,7 +72,7 @@\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n- SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n+ SortConfig.bucket = None\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-616/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-616/src/pytest_sort/config.py\", line 51, in from_pytest\nINTERNALERROR> SortConfig._bucket_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-616/src/pytest_sort/config.py\", line 78, in _bucket_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket='None'\n"}, "duration": 0.3417799472808838}, {"mutant": {"mutator_name": "FuncCall", "lineno": 78, "col_offset": 18, "end_lineno": 78, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:78\n@@ -75,7 +75,7 @@\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n- raise ValueError(msg)\n+ raise None\n \n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestSortConfig.test_from_pytest_bucket_invalid ________________\n\nself = \n\n def test_from_pytest_bucket_invalid(self):\n pytest_config = self.PytestConfig({\"sort_bucket\": \"September\"}, {})\n with pytest.raises(ValueError, match=\"^Invalid Value for sort-bucket='September'$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:132: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-617/src/pytest_sort/config.py:51: in from_pytest\n SortConfig._bucket_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-617/src/pytest_sort/config.py:78: TypeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.6427018642425537}, {"mutant": {"mutator_name": "FuncCall", "lineno": 83, "col_offset": 12, "end_lineno": 83, "end_col_offset": 48, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:83\n@@ -80,7 +80,7 @@\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n+ None or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] FAILED [ 12%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_bucket_mode[getoption0-getini0-md5] ______\n\nself = \ngetoption = {'sort_bucket_mode': 'md5'}, getini = {'sort_bucket_mode': 'random'}\nexpected = 'md5'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket_mode\": \"md5\"}, {\"sort_bucket_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_bucket_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_bucket_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_bucket_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_bucket_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_bucket_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_bucket_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_bucket_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_bucket_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ({\"sort_mode\": \"md5\"}, {\"sort_bucket_mode\": \"sort_mode\"}, \"md5\"),\n ({\"sort_mode\": \"md5\"}, {}, \"md5\"),\n ],\n )\n def test_from_pytest_bucket_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.bucket_mode == expected\nE AssertionError\n\ntest/test_config.py:154: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 20 passed in 0.34s =========================\n\n"}, "duration": 0.6321742534637451}, {"mutant": {"mutator_name": "FuncCall", "lineno": 83, "col_offset": 52, "end_lineno": 83, "end_col_offset": 85, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:83\n@@ -80,7 +80,7 @@\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n+ config.getoption(\"sort_bucket_mode\") or None or SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] FAILED [ 13%]\n\n=================================== FAILURES ===================================\n___ TestSortConfig.test_from_pytest_bucket_mode[getoption2-getini2-reverse] ____\n\nself = \ngetoption = {}, getini = {'sort_bucket_mode': 'reverse'}, expected = 'reverse'\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_bucket_mode\": \"md5\"}, {\"sort_bucket_mode\": \"random\"}, \"md5\"),\n ({}, {\"sort_bucket_mode\": \"ordered\"}, \"ordered\"),\n ({}, {\"sort_bucket_mode\": \"reverse\"}, \"reverse\"),\n ({}, {\"sort_bucket_mode\": \"md5\"}, \"md5\"),\n ({}, {\"sort_bucket_mode\": \"random\"}, \"random\"),\n ({}, {\"sort_bucket_mode\": \"fastest\"}, \"fastest\"),\n ({}, {\"sort_bucket_mode\": \"diffcov\"}, \"diffcov\"),\n ({}, {\"sort_bucket_mode\": \"mutcov\"}, \"mutcov\"),\n ({}, {\"sort_bucket_mode\": \"none\"}, \"ordered\"),\n ({}, {}, \"ordered\"),\n ({\"sort_mode\": \"md5\"}, {\"sort_bucket_mode\": \"sort_mode\"}, \"md5\"),\n ({\"sort_mode\": \"md5\"}, {}, \"md5\"),\n ],\n )\n def test_from_pytest_bucket_mode(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.bucket_mode == expected\nE AssertionError\n\ntest/test_config.py:154: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 22 passed in 0.38s =========================\n\n"}, "duration": 0.6478321552276611}, {"mutant": {"mutator_name": "FuncCall", "lineno": 87, "col_offset": 33, "end_lineno": 87, "end_col_offset": 97, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:87\n@@ -84,7 +84,7 @@\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n- SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n+ SortConfig.bucket_mode = None\n if SortConfig.bucket_mode not in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-620/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-620/src/pytest_sort/config.py\", line 52, in from_pytest\nINTERNALERROR> SortConfig._bucket_mode_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-620/src/pytest_sort/config.py\", line 90, in _bucket_mode_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid Value for sort-bucket-mode='None'\n"}, "duration": 0.35072970390319824}, {"mutant": {"mutator_name": "FuncCall", "lineno": 90, "col_offset": 18, "end_lineno": 90, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:90\n@@ -87,7 +87,7 @@\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n- raise ValueError(msg)\n+ raise None\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_bucket_mode_invalid ______________\n\nself = \n\n def test_from_pytest_bucket_mode_invalid(self):\n pytest_config = self.PytestConfig({\"sort_bucket_mode\": \"September\"}, {})\n with pytest.raises(ValueError, match=\"^Invalid Value for sort-bucket-mode='September'$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:159: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-621/src/pytest_sort/config.py:52: in from_pytest\n SortConfig._bucket_mode_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = (\n config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n )\n if SortConfig.bucket_mode == \"sort_mode\":\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-621/src/pytest_sort/config.py:90: TypeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.27s ===============================\n\n"}, "duration": 0.5513186454772949}, {"mutant": {"mutator_name": "FuncCall", "lineno": 94, "col_offset": 11, "end_lineno": 94, "end_col_offset": 45, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:94\n@@ -91,7 +91,7 @@\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n+ if None and config.getoption(\"sort_record\"):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n> with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\nE Failed: DID NOT RAISE \n\ntest/test_config.py:163: Failed\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - Failed: DID NOT RAISE \n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.32s =========================\n\n"}, "duration": 0.566875696182251}, {"mutant": {"mutator_name": "FuncCall", "lineno": 94, "col_offset": 50, "end_lineno": 94, "end_col_offset": 81, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:94\n@@ -91,7 +91,7 @@\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n+ if config.getoption(\"sort_no_record\") and None:\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n if config.getoption(\"sort_no_record\"):\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n> with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\nE Failed: DID NOT RAISE \n\ntest/test_config.py:163: Failed\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - Failed: DID NOT RAISE \n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.53s =========================\n\n"}, "duration": 0.8962705135345459}, {"mutant": {"mutator_name": "FuncCall", "lineno": 95, "col_offset": 18, "end_lineno": 95, "end_col_offset": 94, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:95\n@@ -92,7 +92,7 @@\n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n- raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n+ raise None\n \n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________ TestSortConfig.test_from_pytest_sort_record_conflict _____________\n\nself = \n\n def test_from_pytest_sort_record_conflict(self):\n pytest_config = self.PytestConfig({\"sort_no_record\": True, \"sort_record\": True}, {})\n with pytest.raises(ValueError, match=\"^Do not use both --sort-record-times and --sort-no-record-times$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:164: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-624/src/pytest_sort/config.py:53: in from_pytest\n SortConfig._record_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-624/src/pytest_sort/config.py:95: TypeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6380681991577148}, {"mutant": {"mutator_name": "FuncCall", "lineno": 97, "col_offset": 11, "end_lineno": 97, "end_col_offset": 45, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:97\n@@ -94,7 +94,7 @@\n if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n \n- if config.getoption(\"sort_no_record\"):\n+ if None:\n SortConfig.record = False\n else:\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_sort_record[getoption1-getini1-False] _____\n\nself = \ngetoption = {'sort_no_record': True}, getini = {}, expected = False\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 33 passed in 0.33s =========================\n\n"}, "duration": 0.5794949531555176}, {"mutant": {"mutator_name": "FuncCall", "lineno": 100, "col_offset": 32, "end_lineno": 100, "end_col_offset": 63, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:100\n@@ -97,7 +97,7 @@\n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n+ SortConfig.record = None or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption0-getini0-True] _____\n\nself = \ngetoption = {'sort_record': True}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.52s =========================\n\n"}, "duration": 0.8929436206817627}, {"mutant": {"mutator_name": "FuncCall", "lineno": 100, "col_offset": 67, "end_lineno": 100, "end_col_offset": 101, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:100\n@@ -97,7 +97,7 @@\n if config.getoption(\"sort_no_record\"):\n SortConfig.record = False\n else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n+ SortConfig.record = config.getoption(\"sort_record\") or None\n # getini returns [] when option not specified\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption2-getini2-True] _____\n\nself = \ngetoption = {}, getini = {'sort_record_times': True}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 33 passed in 0.52s =========================\n\n"}, "duration": 0.9022107124328613}, {"mutant": {"mutator_name": "FuncCall", "lineno": 102, "col_offset": 15, "end_lineno": 102, "end_col_offset": 50, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:102\n@@ -99,7 +99,7 @@\n else:\n SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n # getini returns [] when option not specified\n- if not isinstance(SortConfig.record, bool):\n+ if not None:\n SortConfig.record = None\n if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n SortConfig.record = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] FAILED [ 19%]\n\n=================================== FAILURES ===================================\n_____ TestSortConfig.test_from_pytest_sort_record[getoption0-getini0-True] _____\n\nself = \ngetoption = {'sort_record': True}, getini = {}, expected = True\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_record\": True}, {}, True),\n ({\"sort_no_record\": True}, {}, False),\n ({}, {\"sort_record_times\": True}, True),\n ({}, {\"sort_record_times\": False}, False),\n ({\"sort_mode\": \"fastest\"}, {}, True),\n ],\n )\n def test_from_pytest_sort_record(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.record == expected\nE AssertionError\n\ntest/test_config.py:179: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 32 passed in 0.32s =========================\n\n"}, "duration": 0.5656144618988037}, {"mutant": {"mutator_name": "FuncCall", "lineno": 109, "col_offset": 26, "end_lineno": 109, "end_col_offset": 55, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:109\n@@ -106,7 +106,7 @@\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n+ SortConfig.seed = None or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] FAILED [ 23%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_seed_getoption[getoption0-getini0-123] ____\n\nself = \ngetoption = {'sort_seed': '123'}, getini = {'sort_seed': '456'}, expected = 123\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_seed\": \"123\"}, {\"sort_seed\": \"456\"}, 123),\n ({}, {\"sort_seed\": \"456\"}, 456),\n ],\n )\n def test_from_pytest_seed_getoption(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.seed == expected\nE AssertionError\n\ntest/test_config.py:201: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 39 passed in 0.36s =========================\n\n"}, "duration": 0.6120436191558838}, {"mutant": {"mutator_name": "FuncCall", "lineno": 109, "col_offset": 59, "end_lineno": 109, "end_col_offset": 85, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:109\n@@ -106,7 +106,7 @@\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n+ SortConfig.seed = config.getoption(\"sort_seed\") or None or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] FAILED [ 23%]\n\n=================================== FAILURES ===================================\n____ TestSortConfig.test_from_pytest_seed_getoption[getoption1-getini1-456] ____\n\nself = \ngetoption = {}, getini = {'sort_seed': '456'}, expected = 456\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({\"sort_seed\": \"123\"}, {\"sort_seed\": \"456\"}, 123),\n ({}, {\"sort_seed\": \"456\"}, 456),\n ],\n )\n def test_from_pytest_seed_getoption(self, getoption, getini, expected):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert config.SortConfig.seed == expected\nE AssertionError\n\ntest/test_config.py:201: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 40 passed in 0.59s =========================\n\n"}, "duration": 0.96504807472229}, {"mutant": {"mutator_name": "FuncCall", "lineno": 110, "col_offset": 15, "end_lineno": 110, "end_col_offset": 45, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:110\n@@ -107,7 +107,7 @@\n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n- if not str(SortConfig.seed).isdigit():\n+ if not None:\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 267, in wrap_session\nINTERNALERROR> config._do_configure()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1053, in _do_configure\nINTERNALERROR> self.hook.pytest_configure.call_historic(kwargs=dict(config=self))\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 514, in call_historic\nINTERNALERROR> res = self._hookexec(self.name, self._hookimpls, kwargs, False)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-631/src/pytest_sort/plugin.py\", line 76, in pytest_configure\nINTERNALERROR> SortConfig.from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-631/src/pytest_sort/config.py\", line 58, in from_pytest\nINTERNALERROR> SortConfig._seed_from_pytest(config)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-631/src/pytest_sort/config.py\", line 112, in _seed_from_pytest\nINTERNALERROR> raise ValueError(msg)\nINTERNALERROR> ValueError: Invalid seed value '275980' must be int\n"}, "duration": 0.35291004180908203}, {"mutant": {"mutator_name": "FuncCall", "lineno": 112, "col_offset": 18, "end_lineno": 112, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:112\n@@ -109,7 +109,7 @@\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n- raise ValueError(msg)\n+ raise None\n SortConfig.seed = int(str(SortConfig.seed))\n \n @staticmethod\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_________________ TestSortConfig.test_from_pytest_seed_invalid _________________\n\nself = \n\n def test_from_pytest_seed_invalid(self):\n pytest_config = self.PytestConfig({}, {\"sort_seed\": \"ABC\"})\n with pytest.raises(ValueError, match=\"^Invalid seed value 'ABC' must be int$\"):\n> config.SortConfig.from_pytest(pytest_config)\n\ntest/test_config.py:206: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n.poodle-temp/run-632/src/pytest_sort/config.py:58: in from_pytest\n SortConfig._seed_from_pytest(config)\n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nconfig = \n\n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n> raise None\nE TypeError: exceptions must derive from BaseException\n\n.poodle-temp/run-632/src/pytest_sort/config.py:112: TypeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_seed_invalid - TypeError: exceptions must derive from BaseException\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.25s ===============================\n\n"}, "duration": 0.6341731548309326}, {"mutant": {"mutator_name": "FuncCall", "lineno": 113, "col_offset": 26, "end_lineno": 113, "end_col_offset": 51, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:113\n@@ -110,7 +110,7 @@\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n- SortConfig.seed = int(str(SortConfig.seed))\n+ SortConfig.seed = None\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestSortConfig.test_from_pytest_default ____________________\n\nself = \n\n def test_from_pytest_default(self):\n pytest_config = self.PytestConfig({}, {})\n \n seed = config.SortConfig.seed\n config.SortConfig.from_pytest(pytest_config)\n \n assert config.SortConfig.mode == \"ordered\"\n assert config.SortConfig.bucket == \"parent\"\n assert config.SortConfig.bucket_mode == \"ordered\"\n assert config.SortConfig.record is None\n assert config.SortConfig.reset is False\n assert config.SortConfig.report is False\n> assert config.SortConfig.seed == seed\nE AssertionError\n\ntest/test_config.py:81: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_default - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.15s ===============================\n\n"}, "duration": 0.39061999320983887}, {"mutant": {"mutator_name": "FuncCall", "lineno": 117, "col_offset": 24, "end_lineno": 117, "end_col_offset": 57, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = None or config.getini(\"sort_datafile\") or None\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] FAILED [ 24%]\n\n=================================== FAILURES ===================================\n_ TestSortConfig.test_from_pytest_database_file_default[getoption1-getini1-expected1] _\n\nself = \ngetoption = {'sort_datafile': './tests/.sort_db'}\ngetini = {'sort_datafile': './tests/.sort'}\nexpected = PosixPath('/home/runner/work/pytest-sort/pytest-sort/tests/.sort_db')\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({}, {}, Path.cwd() / \".pytest_sort_data\"),\n (\n {\"sort_datafile\": \"./tests/.sort_db\"},\n {\"sort_datafile\": \"./tests/.sort\"},\n Path.cwd() / \"tests\" / \".sort_db\",\n ),\n ({}, {\"sort_datafile\": \"./tests/.sort\"}, Path.cwd() / \"tests\" / \".sort\"),\n ],\n )\n def test_from_pytest_database_file_default(self, getoption, getini, expected: Path):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert database.database_file.absolute() == expected.absolute()\nE AssertionError\n\ntest/test_config.py:223: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 42 passed in 0.38s =========================\n\n"}, "duration": 0.626295804977417}, {"mutant": {"mutator_name": "FuncCall", "lineno": 117, "col_offset": 61, "end_lineno": 117, "end_col_offset": 91, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:117\n@@ -114,7 +114,7 @@\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n+ database_file = config.getoption(\"sort_datafile\") or None or None\n if database_file:\n database.database_file = Path(database_file)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] FAILED [ 25%]\n\n=================================== FAILURES ===================================\n_ TestSortConfig.test_from_pytest_database_file_default[getoption2-getini2-expected2] _\n\nself = \ngetoption = {}, getini = {'sort_datafile': './tests/.sort'}\nexpected = PosixPath('/home/runner/work/pytest-sort/pytest-sort/tests/.sort')\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({}, {}, Path.cwd() / \".pytest_sort_data\"),\n (\n {\"sort_datafile\": \"./tests/.sort_db\"},\n {\"sort_datafile\": \"./tests/.sort\"},\n Path.cwd() / \"tests\" / \".sort_db\",\n ),\n ({}, {\"sort_datafile\": \"./tests/.sort\"}, Path.cwd() / \"tests\" / \".sort\"),\n ],\n )\n def test_from_pytest_database_file_default(self, getoption, getini, expected: Path):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert database.database_file.absolute() == expected.absolute()\nE AssertionError\n\ntest/test_config.py:223: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 43 passed in 0.62s =========================\n\n"}, "duration": 0.9955828189849854}, {"mutant": {"mutator_name": "FuncCall", "lineno": 119, "col_offset": 37, "end_lineno": 119, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:119\n@@ -116,7 +116,7 @@\n def _database_file_from_pytest(config: pytest.Config) -> None:\n database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n if database_file:\n- database.database_file = Path(database_file)\n+ database.database_file = None\n \n @staticmethod\n def header_dict() -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_ TestSortConfig.test_from_pytest_database_file_default[getoption1-getini1-expected1] _\n\nself = \ngetoption = {'sort_datafile': './tests/.sort_db'}\ngetini = {'sort_datafile': './tests/.sort'}\nexpected = PosixPath('/home/runner/work/pytest-sort/pytest-sort/tests/.sort_db')\n\n @pytest.mark.parametrize(\n (\"getoption\", \"getini\", \"expected\"),\n [\n ({}, {}, Path.cwd() / \".pytest_sort_data\"),\n (\n {\"sort_datafile\": \"./tests/.sort_db\"},\n {\"sort_datafile\": \"./tests/.sort\"},\n Path.cwd() / \"tests\" / \".sort_db\",\n ),\n ({}, {\"sort_datafile\": \"./tests/.sort\"}, Path.cwd() / \"tests\" / \".sort\"),\n ],\n )\n def test_from_pytest_database_file_default(self, getoption, getini, expected: Path):\n pytest_config = self.PytestConfig(getoption, getini)\n config.SortConfig.from_pytest(pytest_config)\n> assert database.database_file.absolute() == expected.absolute()\nE AttributeError: 'NoneType' object has no attribute 'absolute'\n\ntest/test_config.py:223: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] - AttributeError: 'NoneType' object has no attribute 'absolute'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.26s ===============================\n\n"}, "duration": 0.6339850425720215}, {"mutant": {"mutator_name": "DictArray", "lineno": 132, "col_offset": 12, "end_lineno": 132, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:132\n@@ -129,7 +129,7 @@\n }\n \n if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket\"] = SortConfig.bucket\n+ None = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-637/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-637/src/pytest_sort/config.py\", line 132\n None = SortConfig.bucket\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1855156421661377}, {"mutant": {"mutator_name": "DictArray", "lineno": 135, "col_offset": 12, "end_lineno": 135, "end_col_offset": 38, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:135\n@@ -132,7 +132,7 @@\n config[\"sort-bucket\"] = SortConfig.bucket\n \n if SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n+ None = SortConfig.bucket_mode\n \n if SortConfig.mode == \"random\":\n config[\"sort-seed\"] = SortConfig.seed\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-638/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-638/src/pytest_sort/config.py\", line 135\n None = SortConfig.bucket_mode\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2719578742980957}, {"mutant": {"mutator_name": "DictArray", "lineno": 138, "col_offset": 12, "end_lineno": 138, "end_col_offset": 31, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:138\n@@ -135,7 +135,7 @@\n config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n \n if SortConfig.mode == \"random\":\n- config[\"sort-seed\"] = SortConfig.seed\n+ None = SortConfig.seed\n \n if SortConfig.reset:\n config[\"sort-reset-times\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-639/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-639/src/pytest_sort/config.py\", line 138\n None = SortConfig.seed\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.18597102165222168}, {"mutant": {"mutator_name": "DictArray", "lineno": 141, "col_offset": 12, "end_lineno": 141, "end_col_offset": 38, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:141\n@@ -138,7 +138,7 @@\n config[\"sort-seed\"] = SortConfig.seed\n \n if SortConfig.reset:\n- config[\"sort-reset-times\"] = True\n+ None = True\n \n if SortConfig.record is not None:\n config[\"sort-record-times\"] = SortConfig.record\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-640/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-640/src/pytest_sort/config.py\", line 141\n None = True\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.1890733242034912}, {"mutant": {"mutator_name": "DictArray", "lineno": 144, "col_offset": 12, "end_lineno": 144, "end_col_offset": 39, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:144\n@@ -141,7 +141,7 @@\n config[\"sort-reset-times\"] = True\n \n if SortConfig.record is not None:\n- config[\"sort-record-times\"] = SortConfig.record\n+ None = SortConfig.record\n \n if SortConfig.report:\n config[\"sort-report-times\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-641/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-641/src/pytest_sort/config.py\", line 144\n None = SortConfig.record\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2821650505065918}, {"mutant": {"mutator_name": "DictArray", "lineno": 147, "col_offset": 12, "end_lineno": 147, "end_col_offset": 39, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:147\n@@ -144,7 +144,7 @@\n config[\"sort-record-times\"] = SortConfig.record\n \n if SortConfig.report:\n- config[\"sort-report-times\"] = True\n+ None = True\n \n if SortConfig.debug:\n config[\"sort-debug\"] = True\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-642/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-642/src/pytest_sort/config.py\", line 147\n None = True\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2806127071380615}, {"mutant": {"mutator_name": "DictArray", "lineno": 150, "col_offset": 12, "end_lineno": 150, "end_col_offset": 32, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:150\n@@ -147,6 +147,6 @@\n config[\"sort-report-times\"] = True\n \n if SortConfig.debug:\n- config[\"sort-debug\"] = True\n+ None = True\n \n return config\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-643/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-643/src/pytest_sort/config.py\", line 150\n None = True\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.19196534156799316}, {"mutant": {"mutator_name": "Return", "lineno": 152, "col_offset": 8, "end_lineno": 152, "end_col_offset": 21, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:152\n@@ -149,4 +149,4 @@\n if SortConfig.debug:\n config[\"sort-debug\"] = True\n \n- return config\n+ return None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 269, in wrap_session\nINTERNALERROR> config.hook.pytest_sessionstart(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/terminal.py\", line 771, in pytest_sessionstart\nINTERNALERROR> lines = self.config.hook.pytest_report_header(\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/compat.py\", line 66, in fixed_hook\nINTERNALERROR> return hook(**kw)\nINTERNALERROR> ^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 113, in _multicall\nINTERNALERROR> raise exception.with_traceback(exception.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-644/src/pytest_sort/plugin.py\", line 83, in pytest_report_header\nINTERNALERROR> for key, value in SortConfig.header_dict().items():\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'items'\n\n"}, "duration": 0.35662055015563965}, {"mutant": {"mutator_name": "Decorator", "lineno": 47, "col_offset": 5, "end_lineno": 62, "end_col_offset": 35, "text": "def from_pytest(config: pytest.Config) -> None:\n \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n SortConfig._mode_from_pytest(config)\n SortConfig._bucket_from_pytest(config)\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n SortConfig.reset = config.getoption('sort_reset_times', default=False)\n SortConfig.report = config.getoption('sort_report_times', default=False)\n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n if config.getoption('sort_debug'):\n SortConfig.debug = True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:47\n@@ -44,22 +44,7 @@\n diff_cov_scores: ClassVar[dict] = {}\n mut_cov_scores: ClassVar[dict] = {}\n \n- @staticmethod\n- def from_pytest(config: pytest.Config) -> None:\n- \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n- SortConfig._mode_from_pytest(config)\n- SortConfig._bucket_from_pytest(config)\n- SortConfig._bucket_mode_from_pytest(config)\n- SortConfig._record_from_pytest(config)\n-\n- SortConfig.reset = config.getoption(\"sort_reset_times\", default=False)\n- SortConfig.report = config.getoption(\"sort_report_times\", default=False)\n-\n- SortConfig._seed_from_pytest(config)\n- SortConfig._database_file_from_pytest(config)\n-\n- if config.getoption(\"sort_debug\"):\n- SortConfig.debug = True\n+ @def from_pytest(config: pytest.Config) -> None:\n \"\"\"Extract pytest_sort settings from pytest's Config options and ini data.\"\"\"\n SortConfig._mode_from_pytest(config)\n SortConfig._bucket_from_pytest(config)\n SortConfig._bucket_mode_from_pytest(config)\n SortConfig._record_from_pytest(config)\n SortConfig.reset = config.getoption('sort_reset_times', default=False)\n SortConfig.report = config.getoption('sort_report_times', default=False)\n SortConfig._seed_from_pytest(config)\n SortConfig._database_file_from_pytest(config)\n if config.getoption('sort_debug'):\n SortConfig.debug = True\n \n @staticmethod\n def _mode_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-645/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-645/src/pytest_sort/config.py\", line 47\n @def from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.282346248626709}, {"mutant": {"mutator_name": "Decorator", "lineno": 64, "col_offset": 5, "end_lineno": 70, "end_col_offset": 33, "text": "def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption('sort_mode') or config.getini('sort_mode') or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n raise ValueError(msg)", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:64\n@@ -61,13 +61,7 @@\n if config.getoption(\"sort_debug\"):\n SortConfig.debug = True\n \n- @staticmethod\n- def _mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.mode = config.getoption(\"sort_mode\") or config.getini(\"sort_mode\") or SortConfig.mode\n- SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n- if SortConfig.mode not in modes:\n- msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n- raise ValueError(msg)\n+ @def _mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.mode = config.getoption('sort_mode') or config.getini('sort_mode') or SortConfig.mode\n SortConfig.mode = legacy_modes.get(SortConfig.mode, SortConfig.mode)\n if SortConfig.mode not in modes:\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n raise ValueError(msg)\n \n @staticmethod\n def _bucket_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-646/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-646/src/pytest_sort/config.py\", line 64\n @def _mode_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.1821892261505127}, {"mutant": {"mutator_name": "Decorator", "lineno": 72, "col_offset": 5, "end_lineno": 78, "end_col_offset": 33, "text": "def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption('sort_bucket') or config.getini('sort_bucket') or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n raise ValueError(msg)", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:72\n@@ -69,13 +69,7 @@\n msg = f\"Invalid Value for sort-mode='{SortConfig.mode}'\"\n raise ValueError(msg)\n \n- @staticmethod\n- def _bucket_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket = config.getoption(\"sort_bucket\") or config.getini(\"sort_bucket\") or SortConfig.bucket\n- SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n- if SortConfig.bucket not in bucket_types:\n- msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n- raise ValueError(msg)\n+ @def _bucket_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket = config.getoption('sort_bucket') or config.getini('sort_bucket') or SortConfig.bucket\n SortConfig.bucket = legacy_bucket_types.get(SortConfig.bucket, SortConfig.bucket)\n if SortConfig.bucket not in bucket_types:\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n raise ValueError(msg)\n \n @staticmethod\n def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-647/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-647/src/pytest_sort/config.py\", line 72\n @def _bucket_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.2442939281463623}, {"mutant": {"mutator_name": "Decorator", "lineno": 80, "col_offset": 5, "end_lineno": 90, "end_col_offset": 33, "text": "def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = config.getoption('sort_bucket_mode') or config.getini('sort_bucket_mode') or SortConfig.bucket_mode\n if SortConfig.bucket_mode == 'sort_mode':\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n raise ValueError(msg)", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:80\n@@ -77,17 +77,7 @@\n msg = f\"Invalid Value for sort-bucket='{SortConfig.bucket}'\"\n raise ValueError(msg)\n \n- @staticmethod\n- def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n- SortConfig.bucket_mode = (\n- config.getoption(\"sort_bucket_mode\") or config.getini(\"sort_bucket_mode\") or SortConfig.bucket_mode\n- )\n- if SortConfig.bucket_mode == \"sort_mode\":\n- SortConfig.bucket_mode = SortConfig.mode\n- SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n- if SortConfig.bucket_mode not in modes:\n- msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n- raise ValueError(msg)\n+ @def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n SortConfig.bucket_mode = config.getoption('sort_bucket_mode') or config.getini('sort_bucket_mode') or SortConfig.bucket_mode\n if SortConfig.bucket_mode == 'sort_mode':\n SortConfig.bucket_mode = SortConfig.mode\n SortConfig.bucket_mode = legacy_modes.get(SortConfig.bucket_mode, SortConfig.bucket_mode)\n if SortConfig.bucket_mode not in modes:\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n raise ValueError(msg)\n \n @staticmethod\n def _record_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-648/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-648/src/pytest_sort/config.py\", line 80\n @def _bucket_mode_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.23968267440795898}, {"mutant": {"mutator_name": "Decorator", "lineno": 92, "col_offset": 5, "end_lineno": 105, "end_col_offset": 36, "text": "def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption('sort_no_record') and config.getoption('sort_record'):\n raise ValueError('Do not use both --sort-record-times and --sort-no-record-times')\n if config.getoption('sort_no_record'):\n SortConfig.record = False\n else:\n SortConfig.record = config.getoption('sort_record') or config.getini('sort_record_times')\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n if SortConfig.mode == 'fastest' and SortConfig.record is None:\n SortConfig.record = True", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:92\n@@ -89,20 +89,7 @@\n msg = f\"Invalid Value for sort-bucket-mode='{SortConfig.bucket_mode}'\"\n raise ValueError(msg)\n \n- @staticmethod\n- def _record_from_pytest(config: pytest.Config) -> None:\n- if config.getoption(\"sort_no_record\") and config.getoption(\"sort_record\"):\n- raise ValueError(\"Do not use both --sort-record-times and --sort-no-record-times\")\n-\n- if config.getoption(\"sort_no_record\"):\n- SortConfig.record = False\n- else:\n- SortConfig.record = config.getoption(\"sort_record\") or config.getini(\"sort_record_times\")\n- # getini returns [] when option not specified\n- if not isinstance(SortConfig.record, bool):\n- SortConfig.record = None\n- if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n- SortConfig.record = True\n+ @def _record_from_pytest(config: pytest.Config) -> None:\n if config.getoption('sort_no_record') and config.getoption('sort_record'):\n raise ValueError('Do not use both --sort-record-times and --sort-no-record-times')\n if config.getoption('sort_no_record'):\n SortConfig.record = False\n else:\n SortConfig.record = config.getoption('sort_record') or config.getini('sort_record_times')\n if not isinstance(SortConfig.record, bool):\n SortConfig.record = None\n if SortConfig.mode == 'fastest' and SortConfig.record is None:\n SortConfig.record = True\n \n @staticmethod\n def _seed_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-649/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-649/src/pytest_sort/config.py\", line 92\n @def _record_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.21808600425720215}, {"mutant": {"mutator_name": "Decorator", "lineno": 107, "col_offset": 5, "end_lineno": 113, "end_col_offset": 51, "text": "def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption('sort_seed') or config.getini('sort_seed') or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:107\n@@ -104,13 +104,7 @@\n if SortConfig.mode == \"fastest\" and SortConfig.record is None:\n SortConfig.record = True\n \n- @staticmethod\n- def _seed_from_pytest(config: pytest.Config) -> None:\n- SortConfig.seed = config.getoption(\"sort_seed\") or config.getini(\"sort_seed\") or SortConfig.seed\n- if not str(SortConfig.seed).isdigit():\n- msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n- raise ValueError(msg)\n- SortConfig.seed = int(str(SortConfig.seed))\n+ @def _seed_from_pytest(config: pytest.Config) -> None:\n SortConfig.seed = config.getoption('sort_seed') or config.getini('sort_seed') or SortConfig.seed\n if not str(SortConfig.seed).isdigit():\n msg = f\"Invalid seed value '{SortConfig.seed}' must be int\"\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n \n @staticmethod\n def _database_file_from_pytest(config: pytest.Config) -> None:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-650/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-650/src/pytest_sort/config.py\", line 107\n @def _seed_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.28380489349365234}, {"mutant": {"mutator_name": "Decorator", "lineno": 115, "col_offset": 5, "end_lineno": 119, "end_col_offset": 56, "text": "def _database_file_from_pytest(config: pytest.Config) -> None:\n database_file = config.getoption('sort_datafile') or config.getini('sort_datafile') or None\n if database_file:\n database.database_file = Path(database_file)", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:115\n@@ -112,11 +112,7 @@\n raise ValueError(msg)\n SortConfig.seed = int(str(SortConfig.seed))\n \n- @staticmethod\n- def _database_file_from_pytest(config: pytest.Config) -> None:\n- database_file = config.getoption(\"sort_datafile\") or config.getini(\"sort_datafile\") or None\n- if database_file:\n- database.database_file = Path(database_file)\n+ @def _database_file_from_pytest(config: pytest.Config) -> None:\n database_file = config.getoption('sort_datafile') or config.getini('sort_datafile') or None\n if database_file:\n database.database_file = Path(database_file)\n \n @staticmethod\n def header_dict() -> dict:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-651/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-651/src/pytest_sort/config.py\", line 115\n @def _database_file_from_pytest(config: pytest.Config) -> None:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.18575596809387207}, {"mutant": {"mutator_name": "Decorator", "lineno": 121, "col_offset": 5, "end_lineno": 152, "end_col_offset": 21, "text": "def header_dict() -> dict:\n \"\"\"Construct dict of pytest_sort configuration data for use in displaying header.\n\n Skips settings that are not currently in use.\n \"\"\"\n config: dict[str, Any] = {'sort-mode': SortConfig.mode}\n if SortConfig.mode not in ('ordered', 'reverse') or SortConfig.bucket_mode != SortConfig.mode:\n config['sort-bucket'] = SortConfig.bucket\n if SortConfig.bucket_mode != SortConfig.mode:\n config['sort-bucket-mode'] = SortConfig.bucket_mode\n if SortConfig.mode == 'random':\n config['sort-seed'] = SortConfig.seed\n if SortConfig.reset:\n config['sort-reset-times'] = True\n if SortConfig.record is not None:\n config['sort-record-times'] = SortConfig.record\n if SortConfig.report:\n config['sort-report-times'] = True\n if SortConfig.debug:\n config['sort-debug'] = True\n return config", "source_folder": "src", "source_file": "src/pytest_sort/config.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py:121\n@@ -118,35 +118,4 @@\n if database_file:\n database.database_file = Path(database_file)\n \n- @staticmethod\n- def header_dict() -> dict:\n- \"\"\"Construct dict of pytest_sort configuration data for use in displaying header.\n-\n- Skips settings that are not currently in use.\n- \"\"\"\n- config: dict[str, Any] = {\n- \"sort-mode\": SortConfig.mode,\n- }\n-\n- if SortConfig.mode not in (\"ordered\", \"reverse\") or SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket\"] = SortConfig.bucket\n-\n- if SortConfig.bucket_mode != SortConfig.mode:\n- config[\"sort-bucket-mode\"] = SortConfig.bucket_mode\n-\n- if SortConfig.mode == \"random\":\n- config[\"sort-seed\"] = SortConfig.seed\n-\n- if SortConfig.reset:\n- config[\"sort-reset-times\"] = True\n-\n- if SortConfig.record is not None:\n- config[\"sort-record-times\"] = SortConfig.record\n-\n- if SortConfig.report:\n- config[\"sort-report-times\"] = True\n-\n- if SortConfig.debug:\n- config[\"sort-debug\"] = True\n-\n- return config\n+ @def header_dict() -> dict:\n \"\"\"Construct dict of pytest_sort configuration data for use in displaying header.\n\n Skips settings that are not currently in use.\n \"\"\"\n config: dict[str, Any] = {'sort-mode': SortConfig.mode}\n if SortConfig.mode not in ('ordered', 'reverse') or SortConfig.bucket_mode != SortConfig.mode:\n config['sort-bucket'] = SortConfig.bucket\n if SortConfig.bucket_mode != SortConfig.mode:\n config['sort-bucket-mode'] = SortConfig.bucket_mode\n if SortConfig.mode == 'random':\n config['sort-seed'] = SortConfig.seed\n if SortConfig.reset:\n config['sort-reset-times'] = True\n if SortConfig.record is not None:\n config['sort-record-times'] = SortConfig.record\n if SortConfig.report:\n config['sort-report-times'] = True\n if SortConfig.debug:\n config['sort-debug'] = True\n return config\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-652/src/pytest_sort/plugin.py\", line 10, in \n from pytest_sort.config import SortConfig, bucket_types, modes\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-652/src/pytest_sort/config.py\", line 121\n @def header_dict() -> dict:\n ^^^\nSyntaxError: invalid syntax\n"}, "duration": 0.2799549102783203}, {"mutant": {"mutator_name": "BinOp", "lineno": 58, "col_offset": 58, "end_lineno": 58, "end_col_offset": 81, "text": "int(mut_end_lineno) - 1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) - 1))\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 6%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.15s =========================\n\n"}, "duration": 0.4030272960662842}, {"mutant": {"mutator_name": "BinOp", "lineno": 58, "col_offset": 58, "end_lineno": 58, "end_col_offset": 81, "text": "int(mut_end_lineno) * 1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) * 1))\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 6%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.26s =========================\n\n"}, "duration": 0.6438488960266113}, {"mutant": {"mutator_name": "AugAssign", "lineno": 92, "col_offset": 20, "end_lineno": 92, "end_col_offset": 44, "text": "test_scores[nodeid] = 5", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ test_scores[nodeid] = 5\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 7%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 8%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 8%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 10%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 17 passed in 0.27s =========================\n\n"}, "duration": 0.6534774303436279}, {"mutant": {"mutator_name": "AugAssign", "lineno": 92, "col_offset": 20, "end_lineno": 92, "end_col_offset": 44, "text": "test_scores[nodeid] += 5", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ test_scores[nodeid] += 5\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 7%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 8%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 8%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 10%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 17 passed in 0.17s =========================\n\n"}, "duration": 0.4195139408111572}, {"mutant": {"mutator_name": "AugAssign", "lineno": 92, "col_offset": 20, "end_lineno": 92, "end_col_offset": 44, "text": "test_scores[nodeid] /= 5", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ test_scores[nodeid] /= 5\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 6%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 7%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 8%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 8%]\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_mut_test_scores PASSED [ 9%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 10%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 17 passed in 0.28s =========================\n\n"}, "duration": 0.6585581302642822}, {"mutant": {"mutator_name": "AugAssign", "lineno": 95, "col_offset": 20, "end_lineno": 95, "end_col_offset": 44, "text": "test_scores[nodeid] = 1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ test_scores[nodeid] = 1\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.5959994792938232}, {"mutant": {"mutator_name": "AugAssign", "lineno": 95, "col_offset": 20, "end_lineno": 95, "end_col_offset": 44, "text": "test_scores[nodeid] += 1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ test_scores[nodeid] += 1\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3785710334777832}, {"mutant": {"mutator_name": "AugAssign", "lineno": 95, "col_offset": 20, "end_lineno": 95, "end_col_offset": 44, "text": "test_scores[nodeid] /= 1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ test_scores[nodeid] /= 1\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.5589559078216553}, {"mutant": {"mutator_name": "UnaryOp", "lineno": 87, "col_offset": 38, "end_lineno": 87, "end_col_offset": 40, "text": "+1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:87\n@@ -84,7 +84,7 @@\n if rpath in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n- test_scores[nodeid] = -1\n+ test_scores[nodeid] = +1\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.5373818874359131}, {"mutant": {"mutator_name": "Compare", "lineno": 39, "col_offset": 11, "end_lineno": 39, "end_col_offset": 39, "text": "diff.header or diff.changes", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:39\n@@ -36,7 +36,7 @@\n changed_lines = {}\n patch_data = whatthepatch.parse_patch(git_diff_patch)\n for diff in patch_data:\n- if diff.header and diff.changes:\n+ if diff.header or diff.changes:\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 1%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header FAILED [ 1%]\n\n=================================== FAILURES ===================================\n______________ TestGitPatch.test_get_diff_changed_lines_no_header ______________\n\nself = \nwhatthepatch = \n\n def test_get_diff_changed_lines_no_header(self, whatthepatch):\n whatthepatch.parse_patch.return_value = [\n wtp.diffobj(\n header=None,\n changes=[\n wtp.Change(old=2, new=2, line=None, hunk=0),\n wtp.Change(old=3, new=None, line=None, hunk=0),\n wtp.Change(old=None, new=4, line=None, hunk=0),\n wtp.Change(old=None, new=None, line=None, hunk=0),\n ],\n text=\"\",\n ),\n ]\n \n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {}\n\ntest/test_diffcov.py:144: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ngit_folder = 'C:/dev'\ngit_diff_patch = 'diff --git a/pytest_sort/module1.py b/pytest_sort/module1.py\\nindex 404ce22..5f2ed85 100644\\n--- a/pytest_sort/module...mple Line 1\\n+ Changed Line 1\\n@@ -24,1 +24,0 @@\\n- Example Deleted Line\\n@@ -30,0 +30,1 @@\\n+ Example Inserted Line\\n'\n\n def get_diff_changed_lines(git_folder: str, git_diff_patch: str) -> dict[Path, set[int]]:\n \"\"\"Use whatthepatch to parse the patch string.\n \n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n patch_data = whatthepatch.parse_patch(git_diff_patch)\n for diff in patch_data:\n if diff.header or diff.changes:\n> path = diff.header.old_path\nE AttributeError: 'NoneType' object has no attribute 'old_path'\n\n.poodle-temp/run-662/src/pytest_sort/diffcov.py:40: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header - AttributeError: 'NoneType' object has no attribute 'old_path'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.14s ==========================\n\n"}, "duration": 0.38778066635131836}, {"mutant": {"mutator_name": "Compare", "lineno": 42, "col_offset": 36, "end_lineno": 42, "end_col_offset": 65, "text": "change.old and change.new and 0", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:42\n@@ -39,7 +39,7 @@\n if diff.header and diff.changes:\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n- changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n+ changed_lines[rpath] = {change.old and change.new and 0 for change in diff.changes}\n return changed_lines\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGitPatch.test_get_diff_changed_lines ___________________\n\nself = \n\n def test_get_diff_changed_lines(self):\n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {20, 24, 30}\n }\nE AssertionError\n\ntest/test_diffcov.py:86: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6065292358398438}, {"mutant": {"mutator_name": "Compare", "lineno": 56, "col_offset": 7, "end_lineno": 56, "end_col_offset": 37, "text": "mut_source_file or mut_lineno", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:56\n@@ -53,7 +53,7 @@\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n- if mut_source_file and mut_lineno:\n+ if mut_source_file or mut_lineno:\n rpath = Path(mut_source_file).resolve()\n changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 1%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________ TestMutChangedLines.test_get_mut_changed_lines_no_lineno ___________\n\nself = \n\n def test_get_mut_changed_lines_no_lineno(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {}\nE AssertionError\n\ntest/test_diffcov.py:191: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.24s ==========================\n\n"}, "duration": 0.6119561195373535}, {"mutant": {"mutator_name": "Compare", "lineno": 84, "col_offset": 11, "end_lineno": 84, "end_col_offset": 33, "text": "rpath not in changed_lines", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:84\n@@ -81,7 +81,7 @@\n \"\"\"Genarate a 'score' for each test case that has some coverage of the changed lines.\"\"\"\n test_scores = {}\n for rpath, nodeid, when, line in get_line_coverage():\n- if rpath in changed_lines:\n+ if rpath not in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n test_scores[nodeid] = -1\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-665/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-665/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-665/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-665/src/pytest_sort/diffcov.py\", line 89, in get_test_scores\nINTERNALERROR> if line in changed_lines[rpath]:\nINTERNALERROR> ~~~~~~~~~~~~~^^^^^^^\nINTERNALERROR> KeyError: PosixPath('/home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/config.py')\n\n============================ no tests ran in 0.09s =============================\n\n"}, "duration": 0.3288595676422119}, {"mutant": {"mutator_name": "Compare", "lineno": 86, "col_offset": 15, "end_lineno": 86, "end_col_offset": 40, "text": "nodeid in test_scores", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:86\n@@ -83,7 +83,7 @@\n for rpath, nodeid, when, line in get_line_coverage():\n if rpath in changed_lines:\n # If test coverage includes changed module\n- if nodeid not in test_scores:\n+ if nodeid in test_scores:\n test_scores[nodeid] = -1\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-666/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-666/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-666/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-666/src/pytest_sort/diffcov.py\", line 92, in get_test_scores\nINTERNALERROR> test_scores[nodeid] -= 5\nINTERNALERROR> ~~~~~~~~~~~^^^^^^^^\nINTERNALERROR> KeyError: 'test/test_diffcov.py::TestGetScores::test_get_test_scores'\n\n============================ no tests ran in 0.10s =============================\n\n"}, "duration": 0.35047101974487305}, {"mutant": {"mutator_name": "Compare", "lineno": 89, "col_offset": 15, "end_lineno": 89, "end_col_offset": 43, "text": "line not in changed_lines[rpath]", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:89\n@@ -86,7 +86,7 @@\n if nodeid not in test_scores:\n test_scores[nodeid] = -1\n # If test coverage includes changed line\n- if line in changed_lines[rpath]:\n+ if line not in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n test_scores[nodeid] -= 5\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage PASSED [ 2%]\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 3%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 5 passed in 0.25s ==========================\n\n"}, "duration": 0.6350607872009277}, {"mutant": {"mutator_name": "Compare", "lineno": 91, "col_offset": 19, "end_lineno": 91, "end_col_offset": 32, "text": "when != 'run'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:91\n@@ -88,7 +88,7 @@\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n- if when == \"run\":\n+ if when != 'run':\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6161928176879883}, {"mutant": {"mutator_name": "Keyword", "lineno": 21, "col_offset": 89, "end_lineno": 21, "end_col_offset": 93, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:21\n@@ -18,7 +18,7 @@\n \n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n- output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=False, check=True) # noqa: S603\n return output.stdout.decode().strip()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n out = diffcov.get_git_toplevel_folder()\n \n> subprocess.run.assert_called_with([\"git\", \"rev-parse\", \"--show-toplevel\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:72: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'rev-parse', '--show-toplevel'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nactual = call(['git', 'rev-parse', '--show-toplevel'], capture_output=False, check=True)\n_error_message = ._error_message at 0x7fb8113ab7e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nE Actual: run(['git', 'rev-parse', '--show-toplevel'], capture_output=False, check=True)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AssertionError: expected call not found.\nExpected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\n Actual: run(['git', 'rev-parse', '--show-toplevel'], capture_output=False, check=True)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.42891621589660645}, {"mutant": {"mutator_name": "Keyword", "lineno": 21, "col_offset": 101, "end_lineno": 21, "end_col_offset": 105, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:21\n@@ -18,7 +18,7 @@\n \n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n- output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=False) # noqa: S603\n return output.stdout.decode().strip()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n out = diffcov.get_git_toplevel_folder()\n \n> subprocess.run.assert_called_with([\"git\", \"rev-parse\", \"--show-toplevel\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:72: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'rev-parse', '--show-toplevel'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nactual = call(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=False)\n_error_message = ._error_message at 0x7fb76f18b7e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nE Actual: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=False)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AssertionError: expected call not found.\nExpected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\n Actual: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=False)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6771786212921143}, {"mutant": {"mutator_name": "Keyword", "lineno": 27, "col_offset": 72, "end_lineno": 27, "end_col_offset": 76, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:27\n@@ -24,7 +24,7 @@\n \n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n- output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=False, check=True) # noqa: S603\n return output.stdout.decode()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n out = diffcov.get_git_diff_patch()\n \n> subprocess.run.assert_called_with([\"git\", \"diff\", \"-U0\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:80: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'diff', '-U0'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'diff', '-U0'], capture_output=True, check=True)\nactual = call(['git', 'diff', '-U0'], capture_output=False, check=True)\n_error_message = ._error_message at 0x7f84de6bb7e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\nE Actual: run(['git', 'diff', '-U0'], capture_output=False, check=True)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AssertionError: expected call not found.\nExpected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\n Actual: run(['git', 'diff', '-U0'], capture_output=False, check=True)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.18s ===============================\n\n"}, "duration": 0.4259629249572754}, {"mutant": {"mutator_name": "Keyword", "lineno": 27, "col_offset": 84, "end_lineno": 27, "end_col_offset": 88, "text": "False", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:27\n@@ -24,7 +24,7 @@\n \n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n- output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=False) # noqa: S603\n return output.stdout.decode()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n out = diffcov.get_git_diff_patch()\n \n> subprocess.run.assert_called_with([\"git\", \"diff\", \"-U0\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:80: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'diff', '-U0'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'diff', '-U0'], capture_output=True, check=True)\nactual = call(['git', 'diff', '-U0'], capture_output=True, check=False)\n_error_message = ._error_message at 0x7f89eef377e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\nE Actual: run(['git', 'diff', '-U0'], capture_output=True, check=False)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AssertionError: expected call not found.\nExpected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\n Actual: run(['git', 'diff', '-U0'], capture_output=True, check=False)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.30s ===============================\n\n"}, "duration": 0.6742017269134521}, {"mutant": {"mutator_name": "Keyword", "lineno": 52, "col_offset": 56, "end_lineno": 52, "end_col_offset": 60, "text": "' '", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:52\n@@ -49,7 +49,7 @@\n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n- mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n+ mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", ' ')\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 1%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 1%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source FAILED [ 2%]\n\n=================================== FAILURES ===================================\n___________ TestMutChangedLines.test_get_mut_changed_lines_no_source ___________\n\nself = \n\n def test_get_mut_changed_lines_no_source(self):\n os_environ = {\n \"MUT_LINENO\": \"20\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {}\nE AssertionError\n\ntest/test_diffcov.py:198: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 3 passed in 0.15s ==========================\n\n"}, "duration": 0.3954803943634033}, {"mutant": {"mutator_name": "Number", "lineno": 42, "col_offset": 64, "end_lineno": 42, "end_col_offset": 65, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:42\n@@ -39,7 +39,7 @@\n if diff.header and diff.changes:\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n- changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n+ changed_lines[rpath] = {change.old or change.new or 1 for change in diff.changes}\n return changed_lines\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestGitPatch.test_get_diff_changed_lines_mock _________________\n\nself = \nwhatthepatch = \n\n def test_get_diff_changed_lines_mock(self, whatthepatch):\n whatthepatch.parse_patch.return_value = [\n wtp.diffobj(\n header=wtp.header(\n old_path=\"pytest_sort/module1.py\",\n index_path=None,\n old_version=None,\n new_path=\"\",\n new_version=None,\n ),\n changes=[\n wtp.Change(old=2, new=2, line=None, hunk=0),\n wtp.Change(old=3, new=None, line=None, hunk=0),\n wtp.Change(old=None, new=4, line=None, hunk=0),\n wtp.Change(old=None, new=None, line=None, hunk=0),\n ],\n text=\"\",\n ),\n wtp.diffobj(\n header=wtp.header(\n old_path=\"pytest_sort/module2.py\",\n index_path=None,\n old_version=None,\n new_path=\"\",\n new_version=None,\n ),\n changes=[\n wtp.Change(old=20, new=2, line=None, hunk=0),\n ],\n text=\"\",\n ),\n ]\n \n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {0, 2, 3, 4},\n Path(\"C:/dev/pytest_sort/module2.py\").resolve(): {20},\n }\nE AssertionError\n\ntest/test_diffcov.py:123: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.24s ==========================\n\n"}, "duration": 0.6162042617797852}, {"mutant": {"mutator_name": "Number", "lineno": 42, "col_offset": 64, "end_lineno": 42, "end_col_offset": 65, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:42\n@@ -39,7 +39,7 @@\n if diff.header and diff.changes:\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n- changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n+ changed_lines[rpath] = {change.old or change.new or -1 for change in diff.changes}\n return changed_lines\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock FAILED [ 1%]\n\n=================================== FAILURES ===================================\n________________ TestGitPatch.test_get_diff_changed_lines_mock _________________\n\nself = \nwhatthepatch = \n\n def test_get_diff_changed_lines_mock(self, whatthepatch):\n whatthepatch.parse_patch.return_value = [\n wtp.diffobj(\n header=wtp.header(\n old_path=\"pytest_sort/module1.py\",\n index_path=None,\n old_version=None,\n new_path=\"\",\n new_version=None,\n ),\n changes=[\n wtp.Change(old=2, new=2, line=None, hunk=0),\n wtp.Change(old=3, new=None, line=None, hunk=0),\n wtp.Change(old=None, new=4, line=None, hunk=0),\n wtp.Change(old=None, new=None, line=None, hunk=0),\n ],\n text=\"\",\n ),\n wtp.diffobj(\n header=wtp.header(\n old_path=\"pytest_sort/module2.py\",\n index_path=None,\n old_version=None,\n new_path=\"\",\n new_version=None,\n ),\n changes=[\n wtp.Change(old=20, new=2, line=None, hunk=0),\n ],\n text=\"\",\n ),\n ]\n \n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {0, 2, 3, 4},\n Path(\"C:/dev/pytest_sort/module2.py\").resolve(): {20},\n }\nE AssertionError\n\ntest/test_diffcov.py:123: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 1 passed in 0.23s ==========================\n\n"}, "duration": 0.6069719791412354}, {"mutant": {"mutator_name": "Number", "lineno": 53, "col_offset": 46, "end_lineno": 53, "end_col_offset": 47, "text": "1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:53\n@@ -50,7 +50,7 @@\n \"\"\"\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n- mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n+ mut_lineno = os.environ.get(\"MUT_LINENO\", 1)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n if mut_source_file and mut_lineno:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 1%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________ TestMutChangedLines.test_get_mut_changed_lines_no_lineno ___________\n\nself = \n\n def test_get_mut_changed_lines_no_lineno(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {}\nE AssertionError\n\ntest/test_diffcov.py:191: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.14s ==========================\n\n"}, "duration": 0.3819270133972168}, {"mutant": {"mutator_name": "Number", "lineno": 53, "col_offset": 46, "end_lineno": 53, "end_col_offset": 47, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:53\n@@ -50,7 +50,7 @@\n \"\"\"\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n- mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n+ mut_lineno = os.environ.get(\"MUT_LINENO\", -1)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n if mut_source_file and mut_lineno:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 0%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 1%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno FAILED [ 1%]\n\n=================================== FAILURES ===================================\n___________ TestMutChangedLines.test_get_mut_changed_lines_no_lineno ___________\n\nself = \n\n def test_get_mut_changed_lines_no_lineno(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {}\nE AssertionError\n\ntest/test_diffcov.py:191: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 2 passed in 0.24s ==========================\n\n"}, "duration": 0.5905637741088867}, {"mutant": {"mutator_name": "Number", "lineno": 58, "col_offset": 80, "end_lineno": 58, "end_col_offset": 81, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 2))\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.22s ===============================\n\n"}, "duration": 0.6061313152313232}, {"mutant": {"mutator_name": "Number", "lineno": 58, "col_offset": 80, "end_lineno": 58, "end_col_offset": 81, "text": "0", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 0))\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 0%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 1%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 2%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 3%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 4%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 5%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 5%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 6%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n========================= 1 failed, 10 passed in 0.15s =========================\n\n"}, "duration": 0.39886975288391113}, {"mutant": {"mutator_name": "Number", "lineno": 87, "col_offset": 39, "end_lineno": 87, "end_col_offset": 40, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:87\n@@ -84,7 +84,7 @@\n if rpath in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n- test_scores[nodeid] = -1\n+ test_scores[nodeid] = -2\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3843672275543213}, {"mutant": {"mutator_name": "Number", "lineno": 87, "col_offset": 39, "end_lineno": 87, "end_col_offset": 40, "text": "0", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:87\n@@ -84,7 +84,7 @@\n if rpath in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n- test_scores[nodeid] = -1\n+ test_scores[nodeid] = -0\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6094017028808594}, {"mutant": {"mutator_name": "Number", "lineno": 92, "col_offset": 43, "end_lineno": 92, "end_col_offset": 44, "text": "6", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ test_scores[nodeid] -= 6\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.21s ===============================\n\n"}, "duration": 0.5791208744049072}, {"mutant": {"mutator_name": "Number", "lineno": 92, "col_offset": 43, "end_lineno": 92, "end_col_offset": 44, "text": "4", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ test_scores[nodeid] -= 4\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4059445858001709}, {"mutant": {"mutator_name": "Number", "lineno": 95, "col_offset": 43, "end_lineno": 95, "end_col_offset": 44, "text": "2", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ test_scores[nodeid] -= 2\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.4028513431549072}, {"mutant": {"mutator_name": "Number", "lineno": 95, "col_offset": 43, "end_lineno": 95, "end_col_offset": 44, "text": "0", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ test_scores[nodeid] -= 0\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6072216033935547}, {"mutant": {"mutator_name": "String", "lineno": 16, "col_offset": 32, "end_lineno": 16, "end_col_offset": 79, "text": "'XX(?P.*)\\\\|(?Psetup|run|teardown)XX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:16\n@@ -13,7 +13,7 @@\n from coverage.sqldata import CoverageData\n \n # pytest-cov populates test context as |(setup|run|teardown)\n-PARSE_TEST_CONTEXT = re.compile(r\"(?P.*)\\|(?Psetup|run|teardown)\")\n+PARSE_TEST_CONTEXT = re.compile('XX(?P.*)\\\\|(?Psetup|run|teardown)XX')\n \n \n def get_git_toplevel_folder() -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] FAILED [ 82%]\n\n=================================== FAILURES ===================================\n_ TestParseTestContext.test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] _\n\nself = \ncontext = 'test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup'\nnodeid = 'test_diffcov.py::TestParseTestContext::test_parse_text_context[1]'\nwhen = 'setup'\n\n @pytest.mark.parametrize(\n (\"context\", \"nodeid\", \"when\"),\n [\n (\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup\",\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]\",\n \"setup\",\n ),\n (\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run\",\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]\",\n \"run\",\n ),\n (\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown\",\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[1]\",\n \"teardown\",\n ),\n (\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown\",\n \"test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]\",\n \"teardown\",\n ),\n ],\n )\n def test_parse_text_context(self, context, nodeid, when):\n importlib.reload(diffcov)\n match = diffcov.PARSE_TEST_CONTEXT.search(context)\n \n> assert match.group(\"nodeid\", \"when\") == (nodeid, when)\nE AttributeError: 'NoneType' object has no attribute 'group'\n\ntest/test_diffcov.py:41: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] - AttributeError: 'NoneType' object has no attribute 'group'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 141 passed in 0.85s =========================\n\n"}, "duration": 1.22975492477417}, {"mutant": {"mutator_name": "String", "lineno": 21, "col_offset": 40, "end_lineno": 21, "end_col_offset": 71, "text": "'XXgit rev-parse --show-toplevelXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:21\n@@ -18,7 +18,7 @@\n \n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n- output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split('XXgit rev-parse --show-toplevelXX'), capture_output=True, check=True) # noqa: S603\n return output.stdout.decode().strip()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n out = diffcov.get_git_toplevel_folder()\n \n> subprocess.run.assert_called_with([\"git\", \"rev-parse\", \"--show-toplevel\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:72: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'rev-parse', '--show-toplevel'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nactual = call(['XXgit', 'rev-parse', '--show-toplevelXX'], capture_output=True, check=True)\n_error_message = ._error_message at 0x7f5acb7bf7e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\nE Actual: run(['XXgit', 'rev-parse', '--show-toplevelXX'], capture_output=True, check=True)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AssertionError: expected call not found.\nExpected: run(['git', 'rev-parse', '--show-toplevel'], capture_output=True, check=True)\n Actual: run(['XXgit', 'rev-parse', '--show-toplevelXX'], capture_output=True, check=True)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.28s ===============================\n\n"}, "duration": 0.5331125259399414}, {"mutant": {"mutator_name": "String", "lineno": 27, "col_offset": 40, "end_lineno": 27, "end_col_offset": 54, "text": "'XXgit diff -U0XX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:27\n@@ -24,7 +24,7 @@\n \n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n- output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n+ output = subprocess.run(shlex.split('XXgit diff -U0XX'), capture_output=True, check=True) # noqa: S603\n return output.stdout.decode()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n out = diffcov.get_git_diff_patch()\n \n> subprocess.run.assert_called_with([\"git\", \"diff\", \"-U0\"], capture_output=True, check=True)\n\ntest/test_diffcov.py:80: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\nself = \nargs = (['git', 'diff', '-U0'],)\nkwargs = {'capture_output': True, 'check': True}\nexpected = call(['git', 'diff', '-U0'], capture_output=True, check=True)\nactual = call(['XXgit', 'diff', '-U0XX'], capture_output=True, check=True)\n_error_message = ._error_message at 0x7fd42d05f7e0>\ncause = None\n\n def assert_called_with(self, /, *args, **kwargs):\n \"\"\"assert that the last call was made with the specified arguments.\n \n Raises an AssertionError if the args and keyword args passed in are\n different to the last call to the mock.\"\"\"\n if self.call_args is None:\n expected = self._format_mock_call_signature(args, kwargs)\n actual = 'not called.'\n error_message = ('expected call not found.\\nExpected: %s\\n Actual: %s'\n % (expected, actual))\n raise AssertionError(error_message)\n \n def _error_message():\n msg = self._format_mock_failure_message(args, kwargs)\n return msg\n expected = self._call_matcher(_Call((args, kwargs), two=True))\n actual = self._call_matcher(self.call_args)\n if actual != expected:\n cause = expected if isinstance(expected, Exception) else None\n> raise AssertionError(_error_message()) from cause\nE AssertionError: expected call not found.\nE Expected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\nE Actual: run(['XXgit', 'diff', '-U0XX'], capture_output=True, check=True)\n\n/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/unittest/mock.py:944: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AssertionError: expected call not found.\nExpected: run(['git', 'diff', '-U0'], capture_output=True, check=True)\n Actual: run(['XXgit', 'diff', '-U0XX'], capture_output=True, check=True)\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.31s ===============================\n\n"}, "duration": 0.6635680198669434}, {"mutant": {"mutator_name": "String", "lineno": 52, "col_offset": 37, "end_lineno": 52, "end_col_offset": 54, "text": "'XXMUT_SOURCE_FILEXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:52\n@@ -49,7 +49,7 @@\n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n- mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n+ mut_source_file = os.environ.get('XXMUT_SOURCE_FILEXX', None)\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 87%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 151 passed in 1.06s =========================\n\n"}, "duration": 1.3753938674926758}, {"mutant": {"mutator_name": "String", "lineno": 53, "col_offset": 32, "end_lineno": 53, "end_col_offset": 44, "text": "'XXMUT_LINENOXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:53\n@@ -50,7 +50,7 @@\n \"\"\"\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n- mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n+ mut_lineno = os.environ.get('XXMUT_LINENOXX', 0)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n if mut_source_file and mut_lineno:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 87%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 151 passed in 1.20s =========================\n\n"}, "duration": 1.574446678161621}, {"mutant": {"mutator_name": "String", "lineno": 54, "col_offset": 36, "end_lineno": 54, "end_col_offset": 52, "text": "'XXMUT_END_LINENOXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:54\n@@ -51,7 +51,7 @@\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n- mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n+ mut_end_lineno = os.environ.get('XXMUT_END_LINENOXX', mut_lineno)\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3791525363922119}, {"mutant": {"mutator_name": "String", "lineno": 76, "col_offset": 49, "end_lineno": 76, "end_col_offset": 57, "text": "'XXnodeidXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:76\n@@ -73,7 +73,7 @@\n for test in tests:\n match = PARSE_TEST_CONTEXT.search(test)\n if match:\n- (nodeid, when) = match.group(\"nodeid\", \"when\")\n+ (nodeid, when) = match.group('XXnodeidXX', \"when\")\n yield rpath, nodeid, when, line\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-692/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-692/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-692/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-692/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-692/src/pytest_sort/diffcov.py\", line 76, in get_line_coverage\nINTERNALERROR> (nodeid, when) = match.group('XXnodeidXX', \"when\")\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> IndexError: no such group\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.3263216018676758}, {"mutant": {"mutator_name": "String", "lineno": 76, "col_offset": 59, "end_lineno": 76, "end_col_offset": 65, "text": "'XXwhenXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:76\n@@ -73,7 +73,7 @@\n for test in tests:\n match = PARSE_TEST_CONTEXT.search(test)\n if match:\n- (nodeid, when) = match.group(\"nodeid\", \"when\")\n+ (nodeid, when) = match.group(\"nodeid\", 'XXwhenXX')\n yield rpath, nodeid, when, line\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-693/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-693/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-693/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-693/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-693/src/pytest_sort/diffcov.py\", line 76, in get_line_coverage\nINTERNALERROR> (nodeid, when) = match.group(\"nodeid\", 'XXwhenXX')\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> IndexError: no such group\n\n============================ no tests ran in 0.09s =============================\n\n"}, "duration": 0.38980650901794434}, {"mutant": {"mutator_name": "String", "lineno": 91, "col_offset": 27, "end_lineno": 91, "end_col_offset": 32, "text": "'XXrunXX'", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:91\n@@ -88,7 +88,7 @@\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n- if when == \"run\":\n+ if when == 'XXrunXX':\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n______________________ TestGetScores.test_get_test_scores ______________________\n\nself = \nget_line_coverage = \n\n def test_get_test_scores(self, get_line_coverage):\n rpath_m1 = Path(\"pytest_sort/module1.py\").resolve()\n rpath_m2 = Path(\"pytest_sort/module2.py\").resolve()\n rpath_m3 = Path(\"pytest_sort/module3.py\").resolve()\n \n changed_lines = {\n rpath_m1: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n rpath_m2: {1, 2, 3, 4, 5, 6, 7, 8, 9},\n }\n \n get_line_coverage.return_value = [\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 1),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"setup\", 2),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 3),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"run\", 4),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 5),\n (rpath_m1, \"test_diffcov.py::covers_changes\", \"teardown\", 6),\n # Covers other module only\n (rpath_m3, \"test_diffcov.py::no_cov\", \"run\", 1),\n # Covers module, but no Coverage on changed lines\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"setup\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"run\", 100),\n (rpath_m2, \"test_diffcov.py::cov_mod_not_line\", \"teardown\", 100),\n # Only covers change in setup\n (rpath_m2, \"test_diffcov.py::cov_setup\", \"setup\", 1),\n # Only covers change in run\n (rpath_m2, \"test_diffcov.py::cov_run\", \"run\", 1),\n # Only covers change in teardown\n (rpath_m2, \"test_diffcov.py::cov_teardown\", \"teardown\", 1),\n ]\n \n> assert diffcov.get_test_scores(changed_lines) == {\n \"test_diffcov.py::covers_changes\": -15,\n \"test_diffcov.py::cov_mod_not_line\": -1,\n \"test_diffcov.py::cov_setup\": -2,\n \"test_diffcov.py::cov_run\": -6,\n \"test_diffcov.py::cov_teardown\": -2,\n }\nE AssertionError\n\ntest/test_diffcov.py:330: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6062195301055908}, {"mutant": {"mutator_name": "FuncCall", "lineno": 16, "col_offset": 21, "end_lineno": 16, "end_col_offset": 80, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:16\n@@ -13,7 +13,7 @@\n from coverage.sqldata import CoverageData\n \n # pytest-cov populates test context as |(setup|run|teardown)\n-PARSE_TEST_CONTEXT = re.compile(r\"(?P.*)\\|(?Psetup|run|teardown)\")\n+PARSE_TEST_CONTEXT = None\n \n \n def get_git_toplevel_folder() -> str:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-695/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-695/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-695/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-695/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-695/src/pytest_sort/diffcov.py\", line 74, in get_line_coverage\nINTERNALERROR> match = PARSE_TEST_CONTEXT.search(test)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'search'\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.325822114944458}, {"mutant": {"mutator_name": "FuncCall", "lineno": 21, "col_offset": 13, "end_lineno": 21, "end_col_offset": 106, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:21\n@@ -18,7 +18,7 @@\n \n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n- output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n+ output = None # noqa: S603\n return output.stdout.decode().strip()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n> out = diffcov.get_git_toplevel_folder()\n\ntest/test_diffcov.py:70: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n output = None # noqa: S603\n> return output.stdout.decode().strip()\nE AttributeError: 'NoneType' object has no attribute 'stdout'\n\n.poodle-temp/run-696/src/pytest_sort/diffcov.py:22: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AttributeError: 'NoneType' object has no attribute 'stdout'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3862624168395996}, {"mutant": {"mutator_name": "FuncCall", "lineno": 22, "col_offset": 11, "end_lineno": 22, "end_col_offset": 41, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:22\n@@ -19,7 +19,7 @@\n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n- return output.stdout.decode().strip()\n+ return None\n \n \n def get_git_diff_patch() -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n out = diffcov.get_git_toplevel_folder()\n \n subprocess.run.assert_called_with([\"git\", \"rev-parse\", \"--show-toplevel\"], capture_output=True, check=True)\n output = subprocess.run.return_value\n \n> assert output.stdout.decode.return_value.strip.return_value == out\nE AssertionError\n\ntest/test_diffcov.py:75: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6097099781036377}, {"mutant": {"mutator_name": "FuncCall", "lineno": 27, "col_offset": 13, "end_lineno": 27, "end_col_offset": 89, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:27\n@@ -24,7 +24,7 @@\n \n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n- output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n+ output = None # noqa: S603\n return output.stdout.decode()\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n> out = diffcov.get_git_diff_patch()\n\ntest/test_diffcov.py:78: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n output = None # noqa: S603\n> return output.stdout.decode()\nE AttributeError: 'NoneType' object has no attribute 'stdout'\n\n.poodle-temp/run-698/src/pytest_sort/diffcov.py:28: AttributeError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AttributeError: 'NoneType' object has no attribute 'stdout'\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6016800403594971}, {"mutant": {"mutator_name": "FuncCall", "lineno": 28, "col_offset": 11, "end_lineno": 28, "end_col_offset": 33, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:28\n@@ -25,7 +25,7 @@\n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n- return output.stdout.decode()\n+ return None\n \n \n def get_diff_changed_lines(git_folder: str, git_diff_patch: str) -> dict[Path, set[int]]:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n out = diffcov.get_git_diff_patch()\n \n subprocess.run.assert_called_with([\"git\", \"diff\", \"-U0\"], capture_output=True, check=True)\n output = subprocess.run.return_value\n \n> assert output.stdout.decode.return_value == out\nE AssertionError\n\ntest/test_diffcov.py:83: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.40262579917907715}, {"mutant": {"mutator_name": "FuncCall", "lineno": 37, "col_offset": 17, "end_lineno": 37, "end_col_offset": 57, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:37\n@@ -34,7 +34,7 @@\n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n- patch_data = whatthepatch.parse_patch(git_diff_patch)\n+ patch_data = None\n for diff in patch_data:\n if diff.header and diff.changes:\n path = diff.header.old_path\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGitPatch.test_get_diff_changed_lines ___________________\n\nself = \n\n def test_get_diff_changed_lines(self):\n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {20, 24, 30}\n }\n\ntest/test_diffcov.py:86: \n_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \n\ngit_folder = 'C:/dev'\ngit_diff_patch = 'diff --git a/pytest_sort/module1.py b/pytest_sort/module1.py\\nindex 404ce22..5f2ed85 100644\\n--- a/pytest_sort/module...mple Line 1\\n+ Changed Line 1\\n@@ -24,1 +24,0 @@\\n- Example Deleted Line\\n@@ -30,0 +30,1 @@\\n+ Example Inserted Line\\n'\n\n def get_diff_changed_lines(git_folder: str, git_diff_patch: str) -> dict[Path, set[int]]:\n \"\"\"Use whatthepatch to parse the patch string.\n \n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n patch_data = None\n> for diff in patch_data:\nE TypeError: 'NoneType' object is not iterable\n\n.poodle-temp/run-700/src/pytest_sort/diffcov.py:38: TypeError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines - TypeError: 'NoneType' object is not iterable\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3979203701019287}, {"mutant": {"mutator_name": "FuncCall", "lineno": 41, "col_offset": 20, "end_lineno": 41, "end_col_offset": 61, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:41\n@@ -38,7 +38,7 @@\n for diff in patch_data:\n if diff.header and diff.changes:\n path = diff.header.old_path\n- rpath = Path(git_folder).joinpath(path).resolve()\n+ rpath = None\n changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGitPatch.test_get_diff_changed_lines ___________________\n\nself = \n\n def test_get_diff_changed_lines(self):\n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {20, 24, 30}\n }\nE AssertionError\n\ntest/test_diffcov.py:86: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.5979034900665283}, {"mutant": {"mutator_name": "FuncCall", "lineno": 52, "col_offset": 22, "end_lineno": 52, "end_col_offset": 61, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:52\n@@ -49,7 +49,7 @@\n Return map of resolved path of file to set of inserted, updated, or deleted line numbers.\n \"\"\"\n changed_lines = {}\n- mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n+ mut_source_file = None\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 87%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 151 passed in 0.84s =========================\n\n"}, "duration": 1.202761173248291}, {"mutant": {"mutator_name": "FuncCall", "lineno": 53, "col_offset": 17, "end_lineno": 53, "end_col_offset": 48, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:53\n@@ -50,7 +50,7 @@\n \"\"\"\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n- mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n+ mut_lineno = None\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n if mut_source_file and mut_lineno:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 87%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 151 passed in 1.17s =========================\n\n"}, "duration": 1.4330403804779053}, {"mutant": {"mutator_name": "FuncCall", "lineno": 54, "col_offset": 21, "end_lineno": 54, "end_col_offset": 65, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:54\n@@ -51,7 +51,7 @@\n changed_lines = {}\n mut_source_file = os.environ.get(\"MUT_SOURCE_FILE\", None)\n mut_lineno = os.environ.get(\"MUT_LINENO\", 0)\n- mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n+ mut_end_lineno = None\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-704/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-704/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-704/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-704/src/pytest_sort/diffcov.py\", line 58, in get_mut_changed_lines\nINTERNALERROR> changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType'\n\n============================ no tests ran in 0.13s =============================\n\n"}, "duration": 0.5049948692321777}, {"mutant": {"mutator_name": "FuncCall", "lineno": 57, "col_offset": 16, "end_lineno": 57, "end_col_offset": 47, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:57\n@@ -54,7 +54,7 @@\n mut_end_lineno = os.environ.get(\"MUT_END_LINENO\", mut_lineno)\n \n if mut_source_file and mut_lineno:\n- rpath = Path(mut_source_file).resolve()\n+ rpath = None\n changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n \n return changed_lines\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines FAILED [ 87%]\n\n=================================== FAILURES ===================================\n________________ TestMutChangedLines.test_get_mut_changed_lines ________________\n\nself = \n\n def test_get_mut_changed_lines(self):\n os_environ = {\n \"MUT_SOURCE_FILE\": \"pytest_sort/module1.py\",\n \"MUT_LINENO\": \"20\",\n \"MUT_END_LINENO\": \"30\",\n }\n with mock.patch.dict(\"pytest_sort.diffcov.os.environ\", os_environ, clear=True):\n> assert diffcov.get_mut_changed_lines() == {\n Path(\"pytest_sort/module1.py\").resolve(): {20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30},\n }\nE AssertionError\n\ntest/test_diffcov.py:172: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 151 passed in 1.18s =========================\n\n"}, "duration": 1.5659093856811523}, {"mutant": {"mutator_name": "FuncCall", "lineno": 58, "col_offset": 31, "end_lineno": 58, "end_col_offset": 83, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ changed_lines[rpath] = None\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-706/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-706/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-706/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-706/src/pytest_sort/diffcov.py\", line 89, in get_test_scores\nINTERNALERROR> if line in changed_lines[rpath]:\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: argument of type 'NoneType' is not iterable\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.32874512672424316}, {"mutant": {"mutator_name": "FuncCall", "lineno": 68, "col_offset": 10, "end_lineno": 68, "end_col_offset": 24, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:68\n@@ -65,7 +65,7 @@\n \n Return flattened data as (resolved_path, nodeid, when, line).\n \"\"\"\n- cov = CoverageData()\n+ cov = None\n cov.read()\n for path in cov.measured_files():\n rpath = Path(path).resolve()\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-707/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-707/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-707/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-707/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-707/src/pytest_sort/diffcov.py\", line 69, in get_line_coverage\nINTERNALERROR> cov.read()\nINTERNALERROR> ^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'read'\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.3250539302825928}, {"mutant": {"mutator_name": "FuncCall", "lineno": 69, "col_offset": 4, "end_lineno": 69, "end_col_offset": 14, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:69\n@@ -66,7 +66,7 @@\n Return flattened data as (resolved_path, nodeid, when, line).\n \"\"\"\n cov = CoverageData()\n- cov.read()\n+ None\n for path in cov.measured_files():\n rpath = Path(path).resolve()\n for line, tests in cov.contexts_by_lineno(path).items():\n"}, "result": {"found": false, "reason_code": "mutant_not_found", "reason_desc": null}, "duration": 1.2763628959655762}, {"mutant": {"mutator_name": "FuncCall", "lineno": 70, "col_offset": 16, "end_lineno": 70, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:70\n@@ -67,7 +67,7 @@\n \"\"\"\n cov = CoverageData()\n cov.read()\n- for path in cov.measured_files():\n+ for path in None:\n rpath = Path(path).resolve()\n for line, tests in cov.contexts_by_lineno(path).items():\n for test in tests:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-709/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-709/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-709/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-709/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-709/src/pytest_sort/diffcov.py\", line 70, in get_line_coverage\nINTERNALERROR> for path in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.3245530128479004}, {"mutant": {"mutator_name": "FuncCall", "lineno": 71, "col_offset": 16, "end_lineno": 71, "end_col_offset": 36, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:71\n@@ -68,7 +68,7 @@\n cov = CoverageData()\n cov.read()\n for path in cov.measured_files():\n- rpath = Path(path).resolve()\n+ rpath = None\n for line, tests in cov.contexts_by_lineno(path).items():\n for test in tests:\n match = PARSE_TEST_CONTEXT.search(test)\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage FAILED [ 90%]\n\n=================================== FAILURES ===================================\n_____________________ TestCoverage.test_get_line_coverage ______________________\n\nself = \nCoverageData = \n\n def test_get_line_coverage(self, CoverageData):\n cov = CoverageData.return_value\n cov.measured_files.return_value = [\"pytest_sort/module1.py\", \"pytest_sort/module2.py\"]\n cov.contexts_by_lineno.side_effect = [\n {\n 1: [\n \"test_diffcov.py::test_get_line_coverage_1|setup\",\n \"test_diffcov.py::test_get_line_coverage_2|setup\",\n ],\n 11: [\"test_diffcov.py::test_get_line_coverage_1|run\"],\n 22: [\"test_diffcov.py::test_get_line_coverage_2|run\"],\n 100: [\"test_diffcov.py::test_get_line_coverage_1|teardown\"],\n },\n {\n 1: [\"test_diffcov.py::test_get_line_coverage_1|run\"],\n 2: [\"test_diffcov.py::test_get_line_coverage_1\"],\n },\n ]\n \n line_coverage = diffcov.get_line_coverage()\n \n> assert next(line_coverage) == (\n Path(\"pytest_sort/module1.py\").resolve(),\n \"test_diffcov.py::test_get_line_coverage_1\",\n \"setup\",\n 1,\n )\nE AssertionError\n\ntest/test_diffcov.py:228: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestCoverage::test_get_line_coverage - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 155 passed in 1.04s =========================\n\n"}, "duration": 1.3131535053253174}, {"mutant": {"mutator_name": "FuncCall", "lineno": 72, "col_offset": 27, "end_lineno": 72, "end_col_offset": 63, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:72\n@@ -69,7 +69,7 @@\n cov.read()\n for path in cov.measured_files():\n rpath = Path(path).resolve()\n- for line, tests in cov.contexts_by_lineno(path).items():\n+ for line, tests in None:\n for test in tests:\n match = PARSE_TEST_CONTEXT.search(test)\n if match:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-711/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-711/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-711/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-711/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-711/src/pytest_sort/diffcov.py\", line 72, in get_line_coverage\nINTERNALERROR> for line, tests in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.13s =============================\n\n"}, "duration": 0.5069928169250488}, {"mutant": {"mutator_name": "FuncCall", "lineno": 74, "col_offset": 24, "end_lineno": 74, "end_col_offset": 55, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:74\n@@ -71,7 +71,7 @@\n rpath = Path(path).resolve()\n for line, tests in cov.contexts_by_lineno(path).items():\n for test in tests:\n- match = PARSE_TEST_CONTEXT.search(test)\n+ match = None\n if match:\n (nodeid, when) = match.group(\"nodeid\", \"when\")\n yield rpath, nodeid, when, line\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_config.py::TestSortConfig::test_defaults PASSED [ 0%]\ntest/test_config.py::TestSortConfig::test_create_default_seed PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_SortConfig_static_methods PASSED [ 1%]\ntest/test_config.py::TestSortConfig::test_from_pytest_default PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption0-getini0-md5] PASSED [ 2%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption1-getini1-ordered] PASSED [ 3%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption2-getini2-reverse] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption3-getini3-md5] PASSED [ 4%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption4-getini4-random] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption5-getini5-fastest] PASSED [ 5%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption6-getini6-diffcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption7-getini7-mutcov] PASSED [ 6%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption8-getini8-ordered] PASSED [ 7%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode[getoption9-getini9-ordered] PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_mode_invalid PASSED [ 8%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption0-getini0-session] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption1-getini1-package] PASSED [ 9%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption2-getini2-module] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption3-getini3-class] PASSED [ 10%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption4-getini4-function] PASSED [ 11%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption5-getini5-parent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption6-getini6-grandparent] PASSED [ 12%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption7-getini7-session] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket[getoption8-getini8-parent] PASSED [ 13%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_invalid PASSED [ 14%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption0-getini0-md5] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption1-getini1-ordered] PASSED [ 15%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption2-getini2-reverse] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption3-getini3-md5] PASSED [ 16%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption4-getini4-random] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption5-getini5-fastest] PASSED [ 17%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption6-getini6-diffcov] PASSED [ 18%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption7-getini7-mutcov] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption8-getini8-ordered] PASSED [ 19%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption9-getini9-ordered] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption10-getini10-md5] PASSED [ 20%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode[getoption11-getini11-md5] PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_bucket_mode_invalid PASSED [ 21%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record_conflict PASSED [ 22%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption0-getini0-True] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption1-getini1-False] PASSED [ 23%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption2-getini2-True] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption3-getini3-False] PASSED [ 24%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_record[getoption4-getini4-True] PASSED [ 25%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_reset PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_report PASSED [ 26%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption0-getini0-123] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_getoption[getoption1-getini1-456] PASSED [ 27%]\ntest/test_config.py::TestSortConfig::test_from_pytest_seed_invalid PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption0-getini0-expected0] PASSED [ 28%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption1-getini1-expected1] PASSED [ 29%]\ntest/test_config.py::TestSortConfig::test_from_pytest_database_file_default[getoption2-getini2-expected2] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption0-False] PASSED [ 30%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption1-True] PASSED [ 31%]\ntest/test_config.py::TestSortConfig::test_from_pytest_sort_debug[getoption2-False] PASSED [ 31%]\ntest/test_config.py::TestDict::test_header_dict_default PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_match PASSED [ 32%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_ordered_mismatch PASSED [ 33%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_match PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_reverse_mismatch PASSED [ 34%]\ntest/test_config.py::TestDict::test_header_dict_sort_bucket_other_match PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_random PASSED [ 35%]\ntest/test_config.py::TestDict::test_header_dict_reset PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_record PASSED [ 36%]\ntest/test_config.py::TestDict::test_header_dict_report PASSED [ 37%]\ntest/test_config.py::TestDict::test_header_dict_debug PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_38 PASSED [ 38%]\ntest/test_core.py::TestImports::test_import_md5_39 PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-test/__init__.py-test/] PASSED [ 39%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Package-tests-tests] PASSED [ 40%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-test/__init__.py-test/__init__.py] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Node-tests-tests] PASSED [ 41%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_from_node[Config-tests|-] PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_package PASSED [ 42%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_module PASSED [ 43%]\ntest/test_core.py::TestCreateBucketIdForNode::test_create_bucket_id_for_class PASSED [ 43%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_id PASSED [ 44%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_fastest PASSED [ 45%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_diffcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_item_key_mutcov PASSED [ 46%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_fastest PASSED [ 47%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_diffcov PASSED [ 48%]\ntest/test_core.py::TestCreateBucketId::test_create_bucket_key_mutcov PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args0-kwargs0-1234] PASSED [ 49%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker[args1-kwargs1-5678] PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_order_marker_error PASSED [ 50%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args0-kwargs0-key0] PASSED [ 51%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args1-kwargs1-key1] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args2-kwargs2-key2] PASSED [ 52%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker[args3-kwargs3-key3] PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_type_error PASSED [ 53%]\ntest/test_core.py::TestValidateMarker::test_validate_sort_marker_value_error PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_function PASSED [ 54%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_cls PASSED [ 55%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_order_mod PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_self PASSED [ 56%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_sort_bucket PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_no_markers PASSED [ 57%]\ntest/test_core.py::TestMarkerSettings::test_get_marker_settings_error PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_bucketid_sortkey PASSED [ 58%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket PASSED [ 59%]\ntest/test_core.py::TestCreateSortKey::test_marker_mode_bucket_key PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_ordered_reverse PASSED [ 60%]\ntest/test_core.py::TestCreateSortKey::test_mode_reverse_ordered PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_mode_fastest PASSED [ 61%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_num PASSED [ 62%]\ntest/test_core.py::TestCreateSortKey::test_min_bucket_key_md5 PASSED [ 63%]\ntest/test_core.py::TestCreateSortKey::test_get_item_sort_key PASSED [ 63%]\ntest/test_core.py::TestSortItems::test_sort_items PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-ordered] PASSED [ 64%]\ntest/test_core.py::TestSortItems::test_sort_items_random[ordered-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_random[random-random] PASSED [ 65%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-ordered] PASSED [ 66%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[ordered-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_diffcov[diffcov-diffcov] PASSED [ 67%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-ordered] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[ordered-mutcov] PASSED [ 68%]\ntest/test_core.py::TestSortItems::test_sort_items_mutcov[mutcov-mutcov] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-ordered] PASSED [ 69%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[ordered-fastest] PASSED [ 70%]\ntest/test_core.py::TestSortItems::test_sort_items_fastest[fastest-fastest] PASSED [ 71%]\ntest/test_core.py::TestSortItems::test_sort_items_debug PASSED [ 71%]\ntest/test_core.py::TestPrintReports::test_print_recorded_times_report PASSED [ 72%]\ntest/test_core.py::TestPrintReports::test_print_test_case_order PASSED [ 72%]\ntest/test_database.py::TestLoadSave::test_load_data PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_loaded PASSED [ 73%]\ntest/test_database.py::TestLoadSave::test_load_data_no_file PASSED [ 74%]\ntest/test_database.py::TestLoadSave::test__save_data PASSED [ 75%]\ntest/test_database.py::TestClearDb::test_clear_db PASSED [ 75%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_less PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_equal PASSED [ 76%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_greater PASSED [ 77%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_defaults PASSED [ 78%]\ntest/test_database.py::TestUpdate::test_update_test_cases_update_mock PASSED [ 78%]\ntest/test_database.py::TestGet::test_get_all_totals PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total PASSED [ 79%]\ntest/test_database.py::TestGet::test_get_bucket_total_not_found PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats PASSED [ 80%]\ntest/test_database.py::TestGet::test_get_stats_not_found PASSED [ 81%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|setup-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-setup] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|run-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-run] PASSED [ 82%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[1]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[1]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestParseTestContext::test_parse_text_context[test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]|teardown-test_diffcov.py::TestParseTestContext::test_parse_text_context[ABC|DEF]-teardown] PASSED [ 83%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch PASSED [ 84%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines PASSED [ 85%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_mock PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_header PASSED [ 86%]\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines_no_changes PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines PASSED [ 87%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_default_end PASSED [ 88%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_lineno PASSED [ 89%]\ntest/test_diffcov.py::TestMutChangedLines::test_get_mut_changed_lines_no_source PASSED [ 89%]\ntest/test_diffcov.py::TestCoverage::test_get_line_coverage FAILED [ 90%]\n\n=================================== FAILURES ===================================\n_____________________ TestCoverage.test_get_line_coverage ______________________\n\nself = \nCoverageData = \n\n def test_get_line_coverage(self, CoverageData):\n cov = CoverageData.return_value\n cov.measured_files.return_value = [\"pytest_sort/module1.py\", \"pytest_sort/module2.py\"]\n cov.contexts_by_lineno.side_effect = [\n {\n 1: [\n \"test_diffcov.py::test_get_line_coverage_1|setup\",\n \"test_diffcov.py::test_get_line_coverage_2|setup\",\n ],\n 11: [\"test_diffcov.py::test_get_line_coverage_1|run\"],\n 22: [\"test_diffcov.py::test_get_line_coverage_2|run\"],\n 100: [\"test_diffcov.py::test_get_line_coverage_1|teardown\"],\n },\n {\n 1: [\"test_diffcov.py::test_get_line_coverage_1|run\"],\n 2: [\"test_diffcov.py::test_get_line_coverage_1\"],\n },\n ]\n \n line_coverage = diffcov.get_line_coverage()\n \n> assert next(line_coverage) == (\n Path(\"pytest_sort/module1.py\").resolve(),\n \"test_diffcov.py::test_get_line_coverage_1\",\n \"setup\",\n 1,\n )\nE StopIteration\n\ntest/test_diffcov.py:228: StopIteration\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestCoverage::test_get_line_coverage - StopIteration\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n======================== 1 failed, 155 passed in 0.88s =========================\n\n"}, "duration": 1.125049352645874}, {"mutant": {"mutator_name": "FuncCall", "lineno": 76, "col_offset": 37, "end_lineno": 76, "end_col_offset": 66, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:76\n@@ -73,7 +73,7 @@\n for test in tests:\n match = PARSE_TEST_CONTEXT.search(test)\n if match:\n- (nodeid, when) = match.group(\"nodeid\", \"when\")\n+ (nodeid, when) = None\n yield rpath, nodeid, when, line\n \n \n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-713/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-713/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-713/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-713/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in get_line_coverage():\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-713/src/pytest_sort/diffcov.py\", line 76, in get_line_coverage\nINTERNALERROR> (nodeid, when) = None\nINTERNALERROR> ^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: cannot unpack non-iterable NoneType object\n\n============================ no tests ran in 0.13s =============================\n\n"}, "duration": 0.5019769668579102}, {"mutant": {"mutator_name": "FuncCall", "lineno": 83, "col_offset": 37, "end_lineno": 83, "end_col_offset": 56, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:83\n@@ -80,7 +80,7 @@\n def get_test_scores(changed_lines: dict[Path, set[int]]) -> dict[str, int]:\n \"\"\"Genarate a 'score' for each test case that has some coverage of the changed lines.\"\"\"\n test_scores = {}\n- for rpath, nodeid, when, line in get_line_coverage():\n+ for rpath, nodeid, when, line in None:\n if rpath in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-714/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-714/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-714/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-714/src/pytest_sort/diffcov.py\", line 83, in get_test_scores\nINTERNALERROR> for rpath, nodeid, when, line in None:\nINTERNALERROR> TypeError: 'NoneType' object is not iterable\n\n============================ no tests ran in 0.08s =============================\n\n"}, "duration": 0.36516356468200684}, {"mutant": {"mutator_name": "FuncCall", "lineno": 101, "col_offset": 11, "end_lineno": 101, "end_col_offset": 99, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:101\n@@ -98,7 +98,7 @@\n \n def get_diff_test_scores() -> dict[str, int]:\n \"\"\"Genarate a 'score' for each test case that has some coverage of the changed files.\"\"\"\n- return get_test_scores(get_diff_changed_lines(get_git_toplevel_folder(), get_git_diff_patch()))\n+ return None\n \n \n def get_mut_test_scores() -> dict[str, int]:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGetScores.test_get_diff_test_scores ____________________\n\nself = \nget_test_scores = \nget_git_toplevel_folder = \nget_git_diff_patch = \nget_diff_changed_lines = \n\n def test_get_diff_test_scores(\n self,\n get_test_scores,\n get_git_toplevel_folder,\n get_git_diff_patch,\n get_diff_changed_lines,\n ):\n> assert diffcov.get_diff_test_scores() == get_test_scores.return_value\nE AssertionError\n\ntest/test_diffcov.py:345: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_diff_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6107332706451416}, {"mutant": {"mutator_name": "FuncCall", "lineno": 106, "col_offset": 11, "end_lineno": 106, "end_col_offset": 51, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:106\n@@ -103,4 +103,4 @@\n \n def get_mut_test_scores() -> dict[str, int]:\n \"\"\"Genarate a 'score' for each test case that has some coverage of the mutated lines.\"\"\"\n- return get_test_scores(get_mut_changed_lines())\n+ return None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-716/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-716/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-716/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-716/src/pytest_sort/core.py\", line 88, in \nINTERNALERROR> \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'get'\n\n============================ no tests ran in 0.12s =============================\n\n"}, "duration": 0.43494653701782227}, {"mutant": {"mutator_name": "DictArray", "lineno": 42, "col_offset": 12, "end_lineno": 42, "end_col_offset": 32, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:42\n@@ -39,7 +39,7 @@\n if diff.header and diff.changes:\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n- changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n+ None = {change.old or change.new or 0 for change in diff.changes}\n return changed_lines\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-717/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-717/src/pytest_sort/core.py\", line 16, in \n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-717/src/pytest_sort/diffcov.py\", line 42\n None = {change.old or change.new or 0 for change in diff.changes}\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.2385118007659912}, {"mutant": {"mutator_name": "DictArray", "lineno": 58, "col_offset": 8, "end_lineno": 58, "end_col_offset": 28, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:58\n@@ -55,7 +55,7 @@\n \n if mut_source_file and mut_lineno:\n rpath = Path(mut_source_file).resolve()\n- changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n+ None = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n \n return changed_lines\n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-718/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-718/src/pytest_sort/core.py\", line 16, in \n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-718/src/pytest_sort/diffcov.py\", line 58\n None = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.22971081733703613}, {"mutant": {"mutator_name": "DictArray", "lineno": 87, "col_offset": 16, "end_lineno": 87, "end_col_offset": 35, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:87\n@@ -84,7 +84,7 @@\n if rpath in changed_lines:\n # If test coverage includes changed module\n if nodeid not in test_scores:\n- test_scores[nodeid] = -1\n+ None = -1\n # If test coverage includes changed line\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-719/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-719/src/pytest_sort/core.py\", line 16, in \n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-719/src/pytest_sort/diffcov.py\", line 87\n None = -1\n ^^^^\nSyntaxError: cannot assign to None\n"}, "duration": 0.23695611953735352}, {"mutant": {"mutator_name": "DictArray", "lineno": 89, "col_offset": 23, "end_lineno": 89, "end_col_offset": 43, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:89\n@@ -86,7 +86,7 @@\n if nodeid not in test_scores:\n test_scores[nodeid] = -1\n # If test coverage includes changed line\n- if line in changed_lines[rpath]:\n+ if line in None:\n # Changed line covered in run phase\n if when == \"run\":\n test_scores[nodeid] -= 5\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-720/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-720/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-720/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-720/src/pytest_sort/diffcov.py\", line 89, in get_test_scores\nINTERNALERROR> if line in None:\nINTERNALERROR> ^^^^^^^^^^^^\nINTERNALERROR> TypeError: argument of type 'NoneType' is not iterable\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5545015335083008}, {"mutant": {"mutator_name": "DictArray", "lineno": 92, "col_offset": 20, "end_lineno": 92, "end_col_offset": 39, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:92\n@@ -89,7 +89,7 @@\n if line in changed_lines[rpath]:\n # Changed line covered in run phase\n if when == \"run\":\n- test_scores[nodeid] -= 5\n+ None -= 5\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-721/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-721/src/pytest_sort/core.py\", line 16, in \n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-721/src/pytest_sort/diffcov.py\", line 92\n None -= 5\n ^^^^\nSyntaxError: 'None' is an illegal expression for augmented assignment\n"}, "duration": 0.2971653938293457}, {"mutant": {"mutator_name": "DictArray", "lineno": 95, "col_offset": 20, "end_lineno": 95, "end_col_offset": 39, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:95\n@@ -92,7 +92,7 @@\n test_scores[nodeid] -= 5\n # Changed line covered in setup or terminate phase\n else:\n- test_scores[nodeid] -= 1\n+ None -= 1\n return test_scores\n \n \n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "\nTraceback (most recent call last):\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/bin/pytest\", line 8, in \n sys.exit(console_main())\n ^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 192, in console_main\n code = main()\n ^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 150, in main\n config = _prepareconfig(args, plugins)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 331, in _prepareconfig\n config = pluginmanager.hook.pytest_cmdline_parse(\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\n return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\n return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 130, in _multicall\n teardown[0].send(outcome)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/helpconfig.py\", line 104, in pytest_cmdline_parse\n config: Config = outcome.get_result()\n ^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\n raise exc.with_traceback(exc.__traceback__)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\n res = hook_impl.function(*args)\n ^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1075, in pytest_cmdline_parse\n self.parse(args)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1425, in parse\n self._preparse(args, addopts=addopts)\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/config/__init__.py\", line 1305, in _preparse\n self.pluginmanager.load_setuptools_entrypoints(\"pytest11\")\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 398, in load_setuptools_entrypoints\n plugin = ep.load()\n ^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/metadata/__init__.py\", line 205, in load\n module = import_module(match.group('module'))\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/importlib/__init__.py\", line 90, in import_module\n return _bootstrap._gcd_import(name[level:], package, level)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"\", line 1387, in _gcd_import\n File \"\", line 1360, in _find_and_load\n File \"\", line 1331, in _find_and_load_unlocked\n File \"\", line 935, in _load_unlocked\n File \"\", line 994, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-722/src/pytest_sort/plugin.py\", line 11, in \n from pytest_sort.core import print_recorded_times_report, sort_items\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-722/src/pytest_sort/core.py\", line 16, in \n from pytest_sort.diffcov import get_diff_test_scores, get_mut_test_scores\n File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-722/src/pytest_sort/diffcov.py\", line 95\n None -= 1\n ^^^^\nSyntaxError: 'None' is an illegal expression for augmented assignment\n"}, "duration": 0.19157910346984863}, {"mutant": {"mutator_name": "Return", "lineno": 22, "col_offset": 4, "end_lineno": 22, "end_col_offset": 41, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:22\n@@ -19,7 +19,7 @@\n def get_git_toplevel_folder() -> str:\n \"\"\"Run Git rev-parse to get toplevel folder name.\"\"\"\n output = subprocess.run(shlex.split(\"git rev-parse --show-toplevel\"), capture_output=True, check=True) # noqa: S603\n- return output.stdout.decode().strip()\n+ return None\n \n \n def get_git_diff_patch() -> str:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder FAILED [ 0%]\n\n=================================== FAILURES ===================================\n__________________ TestGitPatch.test_get_git_toplevel_folder ___________________\n\nself = \nsubprocess = \n\n def test_get_git_toplevel_folder(self, subprocess):\n out = diffcov.get_git_toplevel_folder()\n \n subprocess.run.assert_called_with([\"git\", \"rev-parse\", \"--show-toplevel\"], capture_output=True, check=True)\n output = subprocess.run.return_value\n \n> assert output.stdout.decode.return_value.strip.return_value == out\nE AssertionError\n\ntest/test_diffcov.py:75: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_toplevel_folder - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.38786959648132324}, {"mutant": {"mutator_name": "Return", "lineno": 28, "col_offset": 4, "end_lineno": 28, "end_col_offset": 33, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:28\n@@ -25,7 +25,7 @@\n def get_git_diff_patch() -> str:\n \"\"\"Run Git Diff command and return result as string.\"\"\"\n output = subprocess.run(shlex.split(\"git diff -U0\"), capture_output=True, check=True) # noqa: S603\n- return output.stdout.decode()\n+ return None\n \n \n def get_diff_changed_lines(git_folder: str, git_diff_patch: str) -> dict[Path, set[int]]:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_git_diff_patch FAILED [ 0%]\n\n=================================== FAILURES ===================================\n_____________________ TestGitPatch.test_get_git_diff_patch _____________________\n\nself = \nsubprocess = \n\n def test_get_git_diff_patch(self, subprocess):\n out = diffcov.get_git_diff_patch()\n \n subprocess.run.assert_called_with([\"git\", \"diff\", \"-U0\"], capture_output=True, check=True)\n output = subprocess.run.return_value\n \n> assert output.stdout.decode.return_value == out\nE AssertionError\n\ntest/test_diffcov.py:83: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_git_diff_patch - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.24s ===============================\n\n"}, "duration": 0.6093745231628418}, {"mutant": {"mutator_name": "Return", "lineno": 43, "col_offset": 4, "end_lineno": 43, "end_col_offset": 24, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:43\n@@ -40,7 +40,7 @@\n path = diff.header.old_path\n rpath = Path(git_folder).joinpath(path).resolve()\n changed_lines[rpath] = {change.old or change.new or 0 for change in diff.changes}\n- return changed_lines\n+ return None\n \n \n def get_mut_changed_lines() -> dict[Path, set[int]]:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGitPatch.test_get_diff_changed_lines ___________________\n\nself = \n\n def test_get_diff_changed_lines(self):\n> assert diffcov.get_diff_changed_lines(\"C:/dev\", GIT_DIFF) == {\n Path(\"C:/dev/pytest_sort/module1.py\").resolve(): {20, 24, 30}\n }\nE AssertionError\n\ntest/test_diffcov.py:86: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGitPatch::test_get_diff_changed_lines - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.23s ===============================\n\n"}, "duration": 0.6029415130615234}, {"mutant": {"mutator_name": "Return", "lineno": 60, "col_offset": 4, "end_lineno": 60, "end_col_offset": 24, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:60\n@@ -57,7 +57,7 @@\n rpath = Path(mut_source_file).resolve()\n changed_lines[rpath] = set(range(int(mut_lineno), int(mut_end_lineno) + 1))\n \n- return changed_lines\n+ return None\n \n \n def get_line_coverage() -> Generator[tuple[Path, str, str, int], Any, None]:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-726/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-726/src/pytest_sort/core.py\", line 233, in sort_items\nINTERNALERROR> SortConfig.mut_cov_scores = get_mut_test_scores()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-726/src/pytest_sort/diffcov.py\", line 106, in get_mut_test_scores\nINTERNALERROR> return get_test_scores(get_mut_changed_lines())\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-726/src/pytest_sort/diffcov.py\", line 84, in get_test_scores\nINTERNALERROR> if rpath in changed_lines:\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> TypeError: argument of type 'NoneType' is not iterable\n\n============================ no tests ran in 0.09s =============================\n\n"}, "duration": 0.3333930969238281}, {"mutant": {"mutator_name": "Return", "lineno": 96, "col_offset": 4, "end_lineno": 96, "end_col_offset": 22, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:96\n@@ -93,7 +93,7 @@\n # Changed line covered in setup or terminate phase\n else:\n test_scores[nodeid] -= 1\n- return test_scores\n+ return None\n \n \n def get_diff_test_scores() -> dict[str, int]:\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-727/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-727/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-727/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-727/src/pytest_sort/core.py\", line 88, in \nINTERNALERROR> \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'get'\n\n============================ no tests ran in 0.18s =============================\n\n"}, "duration": 0.5497562885284424}, {"mutant": {"mutator_name": "Return", "lineno": 101, "col_offset": 4, "end_lineno": 101, "end_col_offset": 99, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:101\n@@ -98,7 +98,7 @@\n \n def get_diff_test_scores() -> dict[str, int]:\n \"\"\"Genarate a 'score' for each test case that has some coverage of the changed files.\"\"\"\n- return get_test_scores(get_diff_changed_lines(get_git_toplevel_folder(), get_git_diff_patch()))\n+ return None\n \n \n def get_mut_test_scores() -> dict[str, int]:\n"}, "result": {"found": true, "reason_code": "mutant_found", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\n\ntest/test_diffcov.py::TestGetScores::test_get_diff_test_scores FAILED [ 0%]\n\n=================================== FAILURES ===================================\n___________________ TestGetScores.test_get_diff_test_scores ____________________\n\nself = \nget_test_scores = \nget_git_toplevel_folder = \nget_git_diff_patch = \nget_diff_changed_lines = \n\n def test_get_diff_test_scores(\n self,\n get_test_scores,\n get_git_toplevel_folder,\n get_git_diff_patch,\n get_diff_changed_lines,\n ):\n> assert diffcov.get_diff_test_scores() == get_test_scores.return_value\nE AssertionError\n\ntest/test_diffcov.py:345: AssertionError\n=========================== short test summary info ============================\nFAILED test/test_diffcov.py::TestGetScores::test_get_diff_test_scores - AssertionError\n!!!!!!!!!!!!!!!!!!!!!!!!!! stopping after 1 failures !!!!!!!!!!!!!!!!!!!!!!!!!!!\n============================== 1 failed in 0.14s ===============================\n\n"}, "duration": 0.3845245838165283}, {"mutant": {"mutator_name": "Return", "lineno": 106, "col_offset": 4, "end_lineno": 106, "end_col_offset": 51, "text": "return None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py\n+++ [Mutant] /home/runner/work/pytest-sort/pytest-sort/src/pytest_sort/diffcov.py:106\n@@ -103,4 +103,4 @@\n \n def get_mut_test_scores() -> dict[str, int]:\n \"\"\"Genarate a 'score' for each test case that has some coverage of the mutated lines.\"\"\"\n- return get_test_scores(get_mut_changed_lines())\n+ return None\n"}, "result": {"found": true, "reason_code": "other", "reason_desc": "============================= test session starts ==============================\nplatform linux -- Python 3.12.1, pytest-7.4.3, pluggy-1.3.0 -- /opt/hostedtoolcache/Python/3.12.1/x64/bin/python\ncachedir: .pytest_cache\npytest-sort:\n sort-mode: mutcov\n sort-bucket: parent\nrootdir: /home/runner/work/pytest-sort/pytest-sort\nconfigfile: pyproject.toml\ntestpaths: test\nplugins: sort-1.3.0, cov-4.1.0\ncollecting ... collected 173 items\nINTERNALERROR> Traceback (most recent call last):\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 271, in wrap_session\nINTERNALERROR> session.exitstatus = doit(config, session) or 0\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 324, in _main\nINTERNALERROR> config.hook.pytest_collection(session=session)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 335, in pytest_collection\nINTERNALERROR> session.perform_collect()\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/_pytest/main.py\", line 678, in perform_collect\nINTERNALERROR> hook.pytest_collection_modifyitems(\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_hooks.py\", line 493, in __call__\nINTERNALERROR> return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_manager.py\", line 115, in _hookexec\nINTERNALERROR> return self._inner_hookexec(hook_name, methods, kwargs, firstresult)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 152, in _multicall\nINTERNALERROR> return outcome.get_result()\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_result.py\", line 114, in get_result\nINTERNALERROR> raise exc.with_traceback(exc.__traceback__)\nINTERNALERROR> File \"/opt/hostedtoolcache/Python/3.12.1/x64/lib/python3.12/site-packages/pluggy/_callers.py\", line 77, in _multicall\nINTERNALERROR> res = hook_impl.function(*args)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-729/src/pytest_sort/plugin.py\", line 98, in pytest_collection_modifyitems\nINTERNALERROR> sort_items(items)\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-729/src/pytest_sort/core.py\", line 239, in sort_items\nINTERNALERROR> create_sort_keys(item, idx, len(items))\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-729/src/pytest_sort/core.py\", line 205, in create_sort_keys\nINTERNALERROR> SortConfig.item_sort_keys[item.nodeid] = item_sort_key or create_item_key[mode or SortConfig.mode](item, idx, count)\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> File \"/home/runner/work/pytest-sort/pytest-sort/.poodle-temp/run-729/src/pytest_sort/core.py\", line 88, in \nINTERNALERROR> \"mutcov\": lambda item, idx, count: SortConfig.mut_cov_scores.get(item.nodeid, 0),\nINTERNALERROR> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\nINTERNALERROR> AttributeError: 'NoneType' object has no attribute 'get'\n\n============================ no tests ran in 0.09s =============================\n\n"}, "duration": 0.4516112804412842}], "summary": {"trials": 727, "tested": 727, "found": 720, "not_found": 7, "timeout": 0, "errors": 0, "success_rate": 0.9903713892709766, "coverage_display": "99.04%"}} \ No newline at end of file +{"mutant_trials": [{"mutant": {"mutator_name": "Number", "lineno": 37, "col_offset": 52, "end_lineno": 37, "end_col_offset": 53, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:37\n@@ -34,7 +34,7 @@\n for nodeid in recorded_times:\n node_data = _sort_data.get(nodeid, {})\n \n- node_data[\"setup\"] = node_data.get(\"setup\", 0)\n+ node_data[\"setup\"] = node_data.get(\"setup\", -1)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.406553030014038}, {"mutant": {"mutator_name": "Number", "lineno": 38, "col_offset": 50, "end_lineno": 38, "end_col_offset": 51, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:38\n@@ -35,7 +35,7 @@\n node_data = _sort_data.get(nodeid, {})\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n- node_data[\"call\"] = node_data.get(\"call\", 0)\n+ node_data[\"call\"] = node_data.get(\"call\", -1)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.4883456230163574}, {"mutant": {"mutator_name": "Number", "lineno": 39, "col_offset": 58, "end_lineno": 39, "end_col_offset": 59, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:39\n@@ -36,7 +36,7 @@\n \n node_data[\"setup\"] = node_data.get(\"setup\", 0)\n node_data[\"call\"] = node_data.get(\"call\", 0)\n- node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n+ node_data[\"teardown\"] = node_data.get(\"teardown\", -1)\n \n setup = recorded_times[nodeid].get(\"setup\", 0)\n if node_data[\"setup\"] < setup:\n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.218832015991211}, {"mutant": {"mutator_name": "Number", "lineno": 41, "col_offset": 52, "end_lineno": 41, "end_col_offset": 53, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:41\n@@ -38,7 +38,7 @@\n node_data[\"call\"] = node_data.get(\"call\", 0)\n node_data[\"teardown\"] = node_data.get(\"teardown\", 0)\n \n- setup = recorded_times[nodeid].get(\"setup\", 0)\n+ setup = recorded_times[nodeid].get(\"setup\", -1)\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.6427171230316162}, {"mutant": {"mutator_name": "Number", "lineno": 45, "col_offset": 50, "end_lineno": 45, "end_col_offset": 51, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:45\n@@ -42,7 +42,7 @@\n if node_data[\"setup\"] < setup:\n node_data[\"setup\"] = setup\n \n- call = recorded_times[nodeid].get(\"call\", 0)\n+ call = recorded_times[nodeid].get(\"call\", -1)\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.5783932209014893}, {"mutant": {"mutator_name": "Number", "lineno": 49, "col_offset": 58, "end_lineno": 49, "end_col_offset": 59, "text": "-1", "source_folder": "src", "source_file": "src/pytest_sort/database.py", "unified_diff": "--- src/pytest_sort/database.py\n+++ [Mutant] src/pytest_sort/database.py:49\n@@ -46,7 +46,7 @@\n if node_data[\"call\"] < call:\n node_data[\"call\"] = call\n \n- teardown = recorded_times[nodeid].get(\"teardown\", 0)\n+ teardown = recorded_times[nodeid].get(\"teardown\", -1)\n if node_data[\"teardown\"] < teardown:\n node_data[\"teardown\"] = teardown\n \n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.0852830410003662}, {"mutant": {"mutator_name": "FuncCall", "lineno": 69, "col_offset": 4, "end_lineno": 69, "end_col_offset": 14, "text": "None", "source_folder": "src", "source_file": "src/pytest_sort/diffcov.py", "unified_diff": "--- src/pytest_sort/diffcov.py\n+++ [Mutant] src/pytest_sort/diffcov.py:69\n@@ -66,7 +66,7 @@\n Return flattened data as (resolved_path, nodeid, when, line).\n \"\"\"\n cov = CoverageData()\n- cov.read()\n+ None\n for path in cov.measured_files():\n rpath = Path(path).resolve()\n for line, tests in cov.contexts_by_lineno(path).items():\n"}, "result": {"found": false, "reason_code": "Mutant Not Found", "reason_desc": null}, "duration": 1.0259461402893066}], "summary": {"trials": 732, "tested": 732, "found": 725, "not_found": 7, "timeout": 0, "errors": 0, "success_rate": 0.9904371584699454, "coverage_display": "99%"}} \ No newline at end of file