From 1030be2966b1627fb81f6a46dafe934cd9ed61ec Mon Sep 17 00:00:00 2001 From: Marius Smytzek Date: Mon, 24 Jul 2023 14:43:29 +0200 Subject: [PATCH] fixed bug for exceptions --- Demo.ipynb | 123 ++++++++++++++------------ src/sflkit/language/python/factory.py | 18 ++-- 2 files changed, 79 insertions(+), 62 deletions(-) diff --git a/Demo.ipynb b/Demo.ipynb index 4f14844..3066bd6 100644 --- a/Demo.ipynb +++ b/Demo.ipynb @@ -42,11 +42,12 @@ " src=\"https://www.youtube-nocookie.com/embed/qcnmi6PgrKg\"\n", " frameborder=\"0\"\n", " allowfullscreen\n", + " \n", " >\n", " " ], "text/plain": [ - "" + "" ] }, "execution_count": 1, @@ -91,20 +92,36 @@ "output_type": "stream", "text": [ "Processing /Users/marius/Desktop/work/projects/sflkit\n", - " Preparing metadata (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25hRequirement already satisfied: astor in /Users/marius/.pyenv/versions/3.10.4/lib/python3.10/site-packages (from sflkit==0.0.1) (0.8.1)\n", - "Requirement already satisfied: numpy in /Users/marius/.pyenv/versions/3.10.4/lib/python3.10/site-packages (from sflkit==0.0.1) (1.21.4)\n", + " Installing build dependencies ... \u001b[?25ldone\n", + "\u001b[?25h Getting requirements to build wheel ... \u001b[?25ldone\n", + "\u001b[?25h Preparing metadata (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25hRequirement already satisfied: sflkitlib>=0.0.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (0.0.1)\n", + "Requirement already satisfied: astor>=0.8.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (0.8.1)\n", + "Requirement already satisfied: numpy==1.25.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (1.25.1)\n", + "Requirement already satisfied: matplotlib==3.7.2 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (3.7.2)\n", + "Requirement already satisfied: sortedcollections>=2.1.0 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (2.1.0)\n", + "Requirement already satisfied: parameterized>=0.8.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sflkit==0.2.6) (0.9.0)\n", + "Requirement already satisfied: contourpy>=1.0.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (1.1.0)\n", + "Requirement already satisfied: cycler>=0.10 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (0.11.0)\n", + "Requirement already satisfied: fonttools>=4.22.0 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (4.40.0)\n", + "Requirement already satisfied: kiwisolver>=1.0.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (1.4.4)\n", + "Requirement already satisfied: packaging>=20.0 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (23.1)\n", + "Requirement already satisfied: pillow>=6.2.0 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (9.5.0)\n", + "Requirement already satisfied: pyparsing<3.1,>=2.3.1 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (2.4.7)\n", + "Requirement already satisfied: python-dateutil>=2.7 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from matplotlib==3.7.2->sflkit==0.2.6) (2.8.2)\n", + "Requirement already satisfied: sortedcontainers in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from sortedcollections>=2.1.0->sflkit==0.2.6) (2.4.0)\n", + "Requirement already satisfied: six>=1.5 in /Users/marius/.pyenv/versions/3.11.1/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib==3.7.2->sflkit==0.2.6) (1.16.0)\n", "Building wheels for collected packages: sflkit\n", - " Building wheel for sflkit (setup.py) ... \u001b[?25ldone\n", - "\u001b[?25h Created wheel for sflkit: filename=sflkit-0.0.1-py3-none-any.whl size=36849 sha256=d7f1eb74bf255ce6931a3cf46b9a96d1b4a0115e9a6a1007ba04db8886cd5326\n", - " Stored in directory: /private/var/folders/09/pt1hglws43n7fh5521n6zyyh0000gn/T/pip-ephem-wheel-cache-w99ak0ft/wheels/17/26/2b/95e39722d6155ccf3490ca6319b00bd6c3f0644a3cffeed02e\n", + " Building wheel for sflkit (pyproject.toml) ... \u001b[?25ldone\n", + "\u001b[?25h Created wheel for sflkit: filename=sflkit-0.2.6-py3-none-any.whl size=39297 sha256=aa8c1331ed527c0a89c0632b24b0ba146eab95760564d41188ef489542d5f516\n", + " Stored in directory: /private/var/folders/09/pt1hglws43n7fh5521n6zyyh0000gn/T/pip-ephem-wheel-cache-1d3qc8oo/wheels/eb/95/8a/7bf6ee4d50417cf8e084552e4c6c5c1932d1e96f61309af921\n", "Successfully built sflkit\n", "Installing collected packages: sflkit\n", " Attempting uninstall: sflkit\n", - " Found existing installation: sflkit 0.0.1\n", - " Uninstalling sflkit-0.0.1:\n", - " Successfully uninstalled sflkit-0.0.1\n", - "Successfully installed sflkit-0.0.1\n" + " Found existing installation: sflkit 0.2.6\n", + " Uninstalling sflkit-0.2.6:\n", + " Successfully uninstalled sflkit-0.2.6\n", + "Successfully installed sflkit-0.2.6\n" ] } ], @@ -651,13 +668,13 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 19, "id": "b0cd0637-7b4a-4736-80a3-6211b7e529c9", "metadata": {}, "outputs": [], "source": [ "def get_config():\n", - " return Config.config(path=middle_py, working=tmp_py, language=language, predicates=predicates, metrics=metrics, passing=passing, failing=failing)" + " return Config.create(path=middle_py, working=tmp_py, language=language, predicates=predicates, metrics=metrics, passing=passing, failing=failing)" ] }, { @@ -670,7 +687,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 20, "id": "d0a87958-fbf9-4ad8-91c5-c4f9526ebcc5", "metadata": {}, "outputs": [], @@ -692,7 +709,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 21, "id": "c19129e7-cf49-4028-8997-76afeafc9324", "metadata": {}, "outputs": [ @@ -700,34 +717,34 @@ "name": "stdout", "output_type": "stream", "text": [ - "import sflkit.instrumentation.lib\n", + "import sflkitlib.lib\n", "\n", "\n", "def middle(x, y, z):\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 2, 0)\n", + " sflkitlib.lib.add_line_event('middle.py', 2, 0)\n", " m = z\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 3, 1)\n", + " sflkitlib.lib.add_line_event('middle.py', 3, 1)\n", " if y < z:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 4, 2)\n", + " sflkitlib.lib.add_line_event('middle.py', 4, 2)\n", " if x < y:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 5, 3)\n", + " sflkitlib.lib.add_line_event('middle.py', 5, 3)\n", " m = y\n", " else:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 6, 4)\n", + " sflkitlib.lib.add_line_event('middle.py', 6, 4)\n", " if x < z:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 7, 5)\n", + " sflkitlib.lib.add_line_event('middle.py', 7, 5)\n", " m = y\n", " else:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 9, 6)\n", + " sflkitlib.lib.add_line_event('middle.py', 9, 6)\n", " if x > y:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 10, 7)\n", + " sflkitlib.lib.add_line_event('middle.py', 10, 7)\n", " m = y\n", " else:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 11, 8)\n", + " sflkitlib.lib.add_line_event('middle.py', 11, 8)\n", " if x > z:\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 12, 9)\n", + " sflkitlib.lib.add_line_event('middle.py', 12, 9)\n", " m = x\n", - " sflkit.instrumentation.lib.add_line_event('middle.py', 13, 10)\n", + " sflkitlib.lib.add_line_event('middle.py', 13, 10)\n", " return m\n", "\n" ] @@ -763,7 +780,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 32, "id": "a5daf879-9158-402f-8b5f-bab67f4736da", "metadata": {}, "outputs": [], @@ -771,11 +788,11 @@ "def test_tmp(x, y, z, expected): \n", " import tmp\n", " importlib.reload(tmp)\n", - " tmp.sflkit.instrumentation.lib.reset()\n", + " tmp.sflkitlib.lib.reset()\n", " try:\n", " return test(tmp.middle, x, y, z, expected)\n", " finally:\n", - " tmp.sflkit.instrumentation.lib.dump_events()\n", + " tmp.sflkitlib.lib.dump_events()\n", " del tmp" ] }, @@ -789,7 +806,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 33, "id": "823303be-b13f-4405-9186-857625aec1b1", "metadata": {}, "outputs": [], @@ -807,7 +824,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 34, "id": "e084ac5b-b15e-47d0-8cda-4dc14adbb2e9", "metadata": {}, "outputs": [], @@ -834,7 +851,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 35, "id": "d922df2e-39a9-4aea-a926-b9275bdd9197", "metadata": {}, "outputs": [], @@ -854,7 +871,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 36, "id": "f52db0b7-4423-49a2-b79c-3bff82e9f084", "metadata": {}, "outputs": [], @@ -872,7 +889,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 37, "id": "cd538827-c2b6-45fe-a3bf-1bae6e213223", "metadata": {}, "outputs": [ @@ -880,16 +897,12 @@ "data": { "text/plain": [ "{'LINE': {'Tarantula': [[middle.py:7]:1.0,\n", - " [middle.py:4]:0.6666666666666666,\n", - " [middle.py:6]:0.6666666666666666,\n", - " [middle.py:13]:0.5,\n", - " [middle.py:2]:0.5,\n", - " [middle.py:3]:0.5,\n", - " [middle.py:9]:0.0,\n", - " [middle.py:10]:0.0]}}" + " [middle.py:4, middle.py:6]:0.6666666666666666,\n", + " [middle.py:3, middle.py:13, middle.py:2]:0.5,\n", + " [middle.py:9, middle.py:10]:0.0]}}" ] }, - "execution_count": 24, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -916,7 +929,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 38, "id": "d2e2b4ed-5c28-45c9-bb12-bd746e7bc966", "metadata": {}, "outputs": [], @@ -930,7 +943,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 39, "id": "a7a490d9-7622-4e46-968e-aeb0d7b368b0", "metadata": {}, "outputs": [ @@ -965,7 +978,7 @@ "" ] }, - "execution_count": 26, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1010,7 +1023,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 40, "id": "bf3f66c0-1131-4017-bbd2-a4d68eec4c22", "metadata": {}, "outputs": [ @@ -1046,7 +1059,7 @@ "" ] }, - "execution_count": 27, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1082,7 +1095,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 41, "id": "416d8d9f-2636-4e79-8dd4-83d5c3a3e68f", "metadata": {}, "outputs": [ @@ -1118,7 +1131,7 @@ "" ] }, - "execution_count": 28, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1154,7 +1167,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 42, "id": "0c9dcfc0-98db-4151-a0bd-44862985a3b4", "metadata": {}, "outputs": [ @@ -1190,7 +1203,7 @@ "" ] }, - "execution_count": 29, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1230,9 +1243,7 @@ "id": "501b70f5-3276-45e8-9e48-7331964004d7", "metadata": {}, "source": [ - "https://github.com/uds-se/sflkit\n", - "\n", - "" + "https://github.com/uds-se/sflkit" ] } ], @@ -1252,7 +1263,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.4" + "version": "3.11.1" } }, "nbformat": 4, diff --git a/src/sflkit/language/python/factory.py b/src/sflkit/language/python/factory.py index 61c9ddf..6fb51fa 100644 --- a/src/sflkit/language/python/factory.py +++ b/src/sflkit/language/python/factory.py @@ -203,12 +203,18 @@ def visit_ExceptHandler(self, node: ExceptHandler) -> Injection: ) def visit_Try(self, node: Try) -> Injection: - else_branch_event = BranchEvent( - self.file, node.lineno, self.id_generator.get_next_id(), self.branch_id, -1 - ) - return Injection( - orelse=[self.get_event_call(else_branch_event)], events=[else_branch_event] - ) + if node.handlers: + else_branch_event = BranchEvent( + self.file, + node.lineno, + self.id_generator.get_next_id(), + self.branch_id, + -1, + ) + return Injection( + orelse=[self.get_event_call(else_branch_event)], + events=[else_branch_event], + ) class DefEventFactory(PythonEventFactory):