From 55c6163d8dae4436138c3457e36d1e8e009f672c Mon Sep 17 00:00:00 2001 From: "andy.disch" Date: Mon, 6 May 2019 11:25:13 +0200 Subject: [PATCH] test hook --- .../example-checkpoint.ipynb | 99 ++++++++++--------- examplepydebuggingandtesting/example.ipynb | 26 +++-- 2 files changed, 70 insertions(+), 55 deletions(-) diff --git a/examplepydebuggingandtesting/.ipynb_checkpoints/example-checkpoint.ipynb b/examplepydebuggingandtesting/.ipynb_checkpoints/example-checkpoint.ipynb index 1950094..fe1039e 100644 --- a/examplepydebuggingandtesting/.ipynb_checkpoints/example-checkpoint.ipynb +++ b/examplepydebuggingandtesting/.ipynb_checkpoints/example-checkpoint.ipynb @@ -21,7 +21,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": {}, "outputs": [ { @@ -44,7 +44,7 @@ "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mZeroDivisionError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[0mfunction_a\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[0mfunction_b\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 17\u001b[1;33m \u001b[1;36m7\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"after __name__ guard\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[0mfunction_a\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[0mfunction_b\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 17\u001b[1;33m \u001b[1;36m7\u001b[0m \u001b[1;33m/\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 18\u001b[0m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"after __name__ guard\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mZeroDivisionError\u001b[0m: division by zero" ] } @@ -109,7 +109,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": null, "metadata": {}, "outputs": [ { @@ -117,25 +117,8 @@ "output_type": "stream", "text": [ "--Return--\n", - "> (12)()->None\n", - "-> pdb.set_trace()\n", - "(Pdb) l\n", - " 7 \t return s3\n", - " 8 \t\n", - " 9 \t\n", - " 10 \ta = \"aaa\"\n", - " 11 \tb = \"bbb\"\n", - " 12 ->\tpdb.set_trace()\n", - " 13 \tc = \"ccc\"\n", - " 14 \tfinal = combine(a, b)\n", - " 15 \tprint(final)\n", - "[EOF]\n", - "(Pdb) p a\n", - "'aaa'\n", - "(Pdb) p c\n", - "'ccc'\n", - "(Pdb) c\n", - "\"aaabbbaaa\"\n" + "> (12)()->None\n", + "-> pdb.set_trace()\n" ] } ], @@ -175,7 +158,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "python -m pdb \"/home/heinrich/gitrepos/examplepydebuggingandtesting/examplepydebuggingandtesting/script2debug.py\"" + "python -m pdb \"C:/Users/dischand/PycharmProjects/examplepydebuggingandtesting/examplepydebuggingandtesting/script2debug.py\"" ] }, { @@ -195,11 +178,12 @@ "output_type": "stream", "text": [ "> (1)()\n", - "(Pdb) n\n", - "TypeError: unsupported operand type(s) for +: 'int' and 'str'\n", - "> (1)()\n", - "(Pdb) ci.num\n", - "5\n", + "(Pdb) l\n", + "[EOF]\n", + "(Pdb) ci\n", + "*** NameError: name 'ci' is not defined\n", + "(Pdb) \n", + "*** NameError: name 'ci' is not defined\n", "(Pdb) c\n" ] }, @@ -208,14 +192,14 @@ "evalue": "unsupported operand type(s) for +: 'int' and 'str'", "output_type": "error", "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mscript2debug\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mCalculator\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpdb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0mpdb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'ci = Calculator(5); ci.square(); ci.divide(2); ci.betafunc(2,\"2\")'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[0;32m/usr/lib/python3.6/pdb.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(statement, globals, locals)\u001b[0m\n\u001b[1;32m 1570\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1571\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatement\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1572\u001b[0;31m \u001b[0mPdb\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatement\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 1573\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 1574\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mruneval\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mexpression\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m/usr/lib/python3.6/bdb.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, cmd, globals, locals)\u001b[0m\n\u001b[1;32m 432\u001b[0m \u001b[0msys\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msettrace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrace_dispatch\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 433\u001b[0m \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 434\u001b[0;31m \u001b[0mexec\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 435\u001b[0m \u001b[0;32mexcept\u001b[0m \u001b[0mBdbQuit\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;32mpass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n", - "\u001b[0;32m~/gitrepos/examplepydebuggingandtesting/examplepydebuggingandtesting/script2debug.py\u001b[0m in \u001b[0;36mbetafunc\u001b[0;34m(self, *args)\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mbetafunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 20\u001b[0;31m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0margs\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 21\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", - "\u001b[0;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'" + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mscript2debug\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mCalculator\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpdb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mpdb\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'ci = Calculator(5); ci.square(); ci.divide(2); ci.betafunc(2,\"2\")'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;32mc:\\users\\ingadmin\\appdata\\local\\programs\\python\\python37-32\\Lib\\pdb.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(statement, globals, locals)\u001b[0m\n\u001b[0;32m 1592\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1593\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstatement\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1594\u001b[1;33m \u001b[0mPdb\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mstatement\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1595\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1596\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mruneval\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexpression\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\users\\ingadmin\\appdata\\local\\programs\\python\\python37-32\\Lib\\bdb.py\u001b[0m in \u001b[0;36mrun\u001b[1;34m(self, cmd, globals, locals)\u001b[0m\n\u001b[0;32m 583\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msettrace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtrace_dispatch\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 584\u001b[0m \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 585\u001b[1;33m \u001b[0mexec\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 586\u001b[0m \u001b[1;32mexcept\u001b[0m \u001b[0mBdbQuit\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 587\u001b[0m \u001b[1;32mpass\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n", + "\u001b[1;32m~\\PycharmProjects\\examplepydebuggingandtesting\\examplepydebuggingandtesting\\script2debug.py\u001b[0m in \u001b[0;36mbetafunc\u001b[1;34m(self, *args)\u001b[0m\n\u001b[0;32m 19\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mbetafunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 20\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0margs\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 21\u001b[1;33m \u001b[1;32mreturn\u001b[0m \u001b[0msum\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 22\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 23\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'" ] } ], @@ -234,32 +218,32 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "> (14)go()\n", + "> (14)go()\n", "-> print(i)\n", - "(Pdb) p i\n", + "(Pdb) i\n", "0\n", "(Pdb) c\n", "0\n", - "> (13)go()\n", + "> (13)go()\n", "-> pdb.set_trace()\n", "(Pdb) c\n", "1\n", - "> (14)go()\n", + "> (14)go()\n", "-> print(i)\n", "(Pdb) c\n", "2\n", - "> (13)go()\n", + "> (13)go()\n", "-> pdb.set_trace()\n", "(Pdb) c\n", "3\n", - "> (14)go()\n", + "> (14)go()\n", "-> print(i)\n", "(Pdb) c\n", "4\n" @@ -362,18 +346,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## hooks for unittests (or use a continuous-integration server)\n", + "### PyCharm\n", "\n", - "Go to: .git/hooks" + "use test runner to explore results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### PyCharm\n", + "## hooks for unittests (or use a continuous-integration server)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "go to: C:\\Users\\dischand\\PycharmProjects\\examplepydebuggingandtesting\\.git\\hooks\n", "\n", - "use test runner to explore results" + "\n", + "#!/bin/sh\n", + "\n", + "if [[ `python -m unittest C:/Users/dischand/PycharmProjects/examplepydebuggingandtesting/tests/test_urban_drainage_ts.py` ]]\n", + "then\n", + "\techo \"> Tests DID NOT pass !\"\n", + "\texit 1\n", + "else\n", + "\techo \"> Tests passed !\"\n", + "fi\n", + "\n", + "echo \"Ready to commit !\"\n", + "exit 0" ] }, { @@ -400,7 +403,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.7" + "version": "3.7.3" } }, "nbformat": 4, diff --git a/examplepydebuggingandtesting/example.ipynb b/examplepydebuggingandtesting/example.ipynb index 901ba4a..fe1039e 100644 --- a/examplepydebuggingandtesting/example.ipynb +++ b/examplepydebuggingandtesting/example.ipynb @@ -346,25 +346,37 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## hooks for unittests (or use a continuous-integration server)" + "### PyCharm\n", + "\n", + "use test runner to explore results" ] }, { - "cell_type": "code", - "execution_count": null, + "cell_type": "markdown", "metadata": {}, - "outputs": [], "source": [ - "pip install python-githooks" + "## hooks for unittests (or use a continuous-integration server)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "### PyCharm\n", + "go to: C:\\Users\\dischand\\PycharmProjects\\examplepydebuggingandtesting\\.git\\hooks\n", "\n", - "use test runner to explore results" + "\n", + "#!/bin/sh\n", + "\n", + "if [[ `python -m unittest C:/Users/dischand/PycharmProjects/examplepydebuggingandtesting/tests/test_urban_drainage_ts.py` ]]\n", + "then\n", + "\techo \"> Tests DID NOT pass !\"\n", + "\texit 1\n", + "else\n", + "\techo \"> Tests passed !\"\n", + "fi\n", + "\n", + "echo \"Ready to commit !\"\n", + "exit 0" ] }, { -- GitLab