JSON Reporter Example Report#

{
  "mutant_trials": [
    {
      "mutant": {
        "mutator_name": "FuncCall",
        "lineno": 45,
        "col_offset": 40,
        "end_lineno": 45,
        "end_col_offset": 73,
        "text": "None",
        "source_folder": "src",
        "source_file": "src/poodle/core.py",
        "unified_diff": "--- src/poodle/core.py\n+++ [Mutant] src/poodle/core.py:45\n@@ -42,7 +42,7 @@\n         results = run_mutant_trails(work, mutants, timeout)\n \n         for trial in results.mutant_trials:\n-            trial.mutant.unified_diff = create_unified_diff(trial.mutant)\n+            trial.mutant.unified_diff = None\n \n         for reporter in work.reporters:\n             reporter(config=config, echo=work.echo, testing_results=results)\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.0598676204681396
    },
    {
      "mutant": {
        "mutator_name": "Number",
        "lineno": 186,
        "col_offset": 43,
        "end_lineno": 186,
        "end_col_offset": 44,
        "text": "-1",
        "source_folder": "src",
        "source_file": "src/poodle/mutate.py",
        "unified_diff": "--- src/poodle/mutate.py\n+++ [Mutant] src/poodle/mutate.py:186\n@@ -183,7 +183,7 @@\n             add_line_filter(line_filters, lineno, \"all\")\n         no_mut_filter: list[str] = re.findall(r\"#\\s*nomut:?\\s*([A-Za-z0-9,\\s]*)[#$]*\", line)\n \n-        if no_mut_filter and no_mut_filter[0].strip().lower() in (\"start\", \"on\"):\n+        if no_mut_filter and no_mut_filter[-1].strip().lower() in (\"start\", \"on\"):\n             no_mut_on = True\n \n         if no_mut_on:\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.5591189861297607
    },
    {
      "mutant": {
        "mutator_name": "Number",
        "lineno": 196,
        "col_offset": 43,
        "end_lineno": 196,
        "end_col_offset": 44,
        "text": "-1",
        "source_folder": "src",
        "source_file": "src/poodle/mutate.py",
        "unified_diff": "--- src/poodle/mutate.py\n+++ [Mutant] src/poodle/mutate.py:196\n@@ -193,7 +193,7 @@\n                 for mutator in mutators.split(\",\"):\n                     add_line_filter(line_filters, lineno, mutator.strip())\n \n-        if no_mut_filter and no_mut_filter[0].strip().lower() in (\"end\", \"off\"):\n+        if no_mut_filter and no_mut_filter[-1].strip().lower() in (\"end\", \"off\"):\n             no_mut_on = False\n \n     return line_filters\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.464325428009033
    },
    {
      "mutant": {
        "mutator_name": "Keyword",
        "lineno": 108,
        "col_offset": 79,
        "end_lineno": 108,
        "end_col_offset": 83,
        "text": "False",
        "source_folder": "src",
        "source_file": "src/poodle/util.py",
        "unified_diff": "--- src/poodle/util.py\n+++ [Mutant] src/poodle/util.py:108\n@@ -105,7 +105,7 @@\n def create_unified_diff(mutant: Mutant) -> str | None:\n     \"\"\"Add unified diff to mutant.\"\"\"\n     if mutant.source_file:\n-        file_lines = mutant.source_file.read_text(\"utf-8\").splitlines(keepends=True)\n+        file_lines = mutant.source_file.read_text(\"utf-8\").splitlines(keepends=False)\n         file_name = str(mutant.source_file)\n         return \"\".join(\n             difflib.unified_diff(\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 3.1800050735473633
    },
    {
      "mutant": {
        "mutator_name": "String",
        "lineno": 108,
        "col_offset": 50,
        "end_lineno": 108,
        "end_col_offset": 57,
        "text": "'XXutf-8XX'",
        "source_folder": "src",
        "source_file": "src/poodle/util.py",
        "unified_diff": "--- src/poodle/util.py\n+++ [Mutant] src/poodle/util.py:108\n@@ -105,7 +105,7 @@\n def create_unified_diff(mutant: Mutant) -> str | None:\n     \"\"\"Add unified diff to mutant.\"\"\"\n     if mutant.source_file:\n-        file_lines = mutant.source_file.read_text(\"utf-8\").splitlines(keepends=True)\n+        file_lines = mutant.source_file.read_text('XXutf-8XX').splitlines(keepends=True)\n         file_name = str(mutant.source_file)\n         return \"\".join(\n             difflib.unified_diff(\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 1.995598316192627
    },
    {
      "mutant": {
        "mutator_name": "Compare",
        "lineno": 26,
        "col_offset": 7,
        "end_lineno": 26,
        "end_col_offset": 25,
        "text": "summary.trials <= 1",
        "source_folder": "src",
        "source_file": "src/poodle/reporters/basic.py",
        "unified_diff": "--- src/poodle/reporters/basic.py\n+++ [Mutant] src/poodle/reporters/basic.py:26\n@@ -23,7 +23,7 @@\n     \"\"\"Echo quick summary to console.\"\"\"\n     echo(\"\")\n     summary = testing_results.summary\n-    if summary.trials < 1:\n+    if summary.trials <= 1:\n         echo(\"!!! No mutants found to test !!!\", fg=\"yellow\")\n         return\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.012969493865967
    },
    {
      "mutant": {
        "mutator_name": "Compare",
        "lineno": 49,
        "col_offset": 12,
        "end_lineno": 49,
        "end_col_offset": 47,
        "text": "str(trial.mutant.source_file) and ''",
        "source_folder": "src",
        "source_file": "src/poodle/reporters/basic.py",
        "unified_diff": "--- src/poodle/reporters/basic.py\n+++ [Mutant] src/poodle/reporters/basic.py:49\n@@ -46,7 +46,7 @@\n     failed_trials.sort(\n         key=lambda trial: (\n             trial.mutant.source_folder,\n-            str(trial.mutant.source_file) or \"\",\n+            str(trial.mutant.source_file) and '',\n             trial.mutant.lineno,\n             trial.mutant.mutator_name,\n         )\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 3.1697938442230225
    },
    {
      "mutant": {
        "mutator_name": "Number",
        "lineno": 26,
        "col_offset": 24,
        "end_lineno": 26,
        "end_col_offset": 25,
        "text": "2",
        "source_folder": "src",
        "source_file": "src/poodle/reporters/basic.py",
        "unified_diff": "--- src/poodle/reporters/basic.py\n+++ [Mutant] src/poodle/reporters/basic.py:26\n@@ -23,7 +23,7 @@\n     \"\"\"Echo quick summary to console.\"\"\"\n     echo(\"\")\n     summary = testing_results.summary\n-    if summary.trials < 1:\n+    if summary.trials < 2:\n         echo(\"!!! No mutants found to test !!!\", fg=\"yellow\")\n         return\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.3608908653259277
    },
    {
      "mutant": {
        "mutator_name": "String",
        "lineno": 49,
        "col_offset": 45,
        "end_lineno": 49,
        "end_col_offset": 47,
        "text": "'XXXX'",
        "source_folder": "src",
        "source_file": "src/poodle/reporters/basic.py",
        "unified_diff": "--- src/poodle/reporters/basic.py\n+++ [Mutant] src/poodle/reporters/basic.py:49\n@@ -46,7 +46,7 @@\n     failed_trials.sort(\n         key=lambda trial: (\n             trial.mutant.source_folder,\n-            str(trial.mutant.source_file) or \"\",\n+            str(trial.mutant.source_file) or 'XXXX',\n             trial.mutant.lineno,\n             trial.mutant.mutator_name,\n         )\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 3.2349610328674316
    },
    {
      "mutant": {
        "mutator_name": "String",
        "lineno": 22,
        "col_offset": 42,
        "end_lineno": 22,
        "end_col_offset": 53,
        "text": "'XXtemplatesXX'",
        "source_folder": "src",
        "source_file": "src/poodle/reporters/html.py",
        "unified_diff": "--- src/poodle/reporters/html.py\n+++ [Mutant] src/poodle/reporters/html.py:22\n@@ -19,7 +19,7 @@\n \n def template_path() -> Path:\n     \"\"\"Return the path to the HTML Template folder.\"\"\"\n-    return Path(__file__).parent.parent / \"templates\"\n+    return Path(__file__).parent.parent / 'XXtemplatesXX'\n \n \n STATIC_FILES = [\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.860416889190674
    },
    {
      "mutant": {
        "mutator_name": "Compare",
        "lineno": 90,
        "col_offset": 11,
        "end_lineno": 90,
        "end_col_offset": 64,
        "text": "'source_file' in d or d['source_folder'] is not None",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:90\n@@ -87,7 +87,7 @@\n         \"\"\"Correct fields in Dictionary for JSON deserialization.\"\"\"\n         if \"source_folder\" in d:\n             d[\"source_folder\"] = Path(d[\"source_folder\"])\n-        if \"source_file\" in d and d[\"source_folder\"] is not None:\n+        if 'source_file' in d or d['source_folder'] is not None:\n             d[\"source_file\"] = Path(d[\"source_file\"])\n         return d\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.748727321624756
    },
    {
      "mutant": {
        "mutator_name": "Keyword",
        "lineno": 83,
        "col_offset": 31,
        "end_lineno": 83,
        "end_col_offset": 35,
        "text": "' '",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:83\n@@ -80,7 +80,7 @@\n \n     source_folder: Path\n     source_file: Path | None\n-    unified_diff: str | None = None\n+    unified_diff: str | None = ' '\n \n     @staticmethod\n     def from_dict(d: dict[str, Any]) -> dict[str, Any]:\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.005250930786133
    },
    {
      "mutant": {
        "mutator_name": "Keyword",
        "lineno": 90,
        "col_offset": 60,
        "end_lineno": 90,
        "end_col_offset": 64,
        "text": "' '",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:90\n@@ -87,7 +87,7 @@\n         \"\"\"Correct fields in Dictionary for JSON deserialization.\"\"\"\n         if \"source_folder\" in d:\n             d[\"source_folder\"] = Path(d[\"source_folder\"])\n-        if \"source_file\" in d and d[\"source_folder\"] is not None:\n+        if \"source_file\" in d and d[\"source_folder\"] is not ' ':\n             d[\"source_file\"] = Path(d[\"source_file\"])\n         return d\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 3.1990931034088135
    },
    {
      "mutant": {
        "mutator_name": "Keyword",
        "lineno": 186,
        "col_offset": 30,
        "end_lineno": 186,
        "end_col_offset": 34,
        "text": "' '",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:186\n@@ -183,7 +183,7 @@\n     @staticmethod\n     def from_dict(d: dict[str, Any]) -> dict[str, Any]:\n         \"\"\"Correct fields in Dictionary for JSON deserialization.\"\"\"\n-        d.pop(\"success_rate\", None)\n+        d.pop(\"success_rate\", ' ')\n         d.pop(\"coverage_display\", None)\n         return d\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.261491537094116
    },
    {
      "mutant": {
        "mutator_name": "Keyword",
        "lineno": 187,
        "col_offset": 34,
        "end_lineno": 187,
        "end_col_offset": 38,
        "text": "' '",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:187\n@@ -184,7 +184,7 @@\n     def from_dict(d: dict[str, Any]) -> dict[str, Any]:\n         \"\"\"Correct fields in Dictionary for JSON deserialization.\"\"\"\n         d.pop(\"success_rate\", None)\n-        d.pop(\"coverage_display\", None)\n+        d.pop(\"coverage_display\", ' ')\n         return d\n \n     def to_dict(self) -> dict[str, Any]:\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.5057268142700195
    },
    {
      "mutant": {
        "mutator_name": "Number",
        "lineno": 157,
        "col_offset": 25,
        "end_lineno": 157,
        "end_col_offset": 26,
        "text": "1",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:157\n@@ -154,7 +154,7 @@\n     @property\n     def success_rate(self) -> float:\n         \"\"\"Return the success rate of the test run.\"\"\"\n-        if self.trials > 0:\n+        if self.trials > 1:\n             return self.found / self.trials\n         if self.tested > 0:\n             return self.found / self.tested\n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.6431467533111572
    },
    {
      "mutant": {
        "mutator_name": "Number",
        "lineno": 159,
        "col_offset": 25,
        "end_lineno": 159,
        "end_col_offset": 26,
        "text": "1",
        "source_folder": "src",
        "source_file": "src/poodle/data_types/data.py",
        "unified_diff": "--- src/poodle/data_types/data.py\n+++ [Mutant] src/poodle/data_types/data.py:159\n@@ -156,7 +156,7 @@\n         \"\"\"Return the success rate of the test run.\"\"\"\n         if self.trials > 0:\n             return self.found / self.trials\n-        if self.tested > 0:\n+        if self.tested > 1:\n             return self.found / self.tested\n         return 0.0\n \n"
      },
      "result": {
        "found": false,
        "reason_code": "Mutant Not Found",
        "reason_desc": null
      },
      "duration": 2.8689138889312744
    }
  ],
  "summary": {
    "trials": 1323,
    "tested": 1323,
    "found": 1306,
    "not_found": 17,
    "timeout": 0,
    "errors": 0,
    "success_rate": 0.9871504157218443,
    "coverage_display": "98.72%"
  }
}