From ec994436cdd879fb7d5b8ac0ffdc944764ab4e38 Mon Sep 17 00:00:00 2001 From: patrik kinnunen Date: Wed, 1 Mar 2023 17:04:16 +0100 Subject: [PATCH 01/21] feat: #1 coverage for get all scripts on None obj --- evennia/scripts/tests.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..8634c67e14 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -7,7 +7,7 @@ from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest - +from evennia.scripts.manager import ScriptDBManager class TestScript(BaseEvenniaTest): def test_create(self): @@ -18,6 +18,11 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() +class Test_improve_coverage(TestCase): + def test_not_obj_return_empty_list(self): + manager_obj = ScriptDBManager() + returned_list = manager_obj.get_all_scripts_on_obj(False) + self.assertEqual(returned_list, []) class TestScriptDB(TestCase): "Check the singleton/static ScriptDB object works correctly" @@ -51,11 +56,9 @@ class TestScriptDB(TestCase): # Check the script is not recreated as a side-effect self.assertFalse(self.scr in ScriptDB.objects.get_all_scripts()) - class TestExtendedLoopingCall(TestCase): """ Test the ExtendedLoopingCall class. - """ @mock.patch("evennia.scripts.scripts.LoopingCall") @@ -87,4 +90,4 @@ class TestExtendedLoopingCall(TestCase): loopcall.__call__.assert_not_called() self.assertEqual(loopcall.interval, 20) - loopcall._scheduleFrom.assert_called_with(121) + loopcall._scheduleFrom.assert_called_with(121) \ No newline at end of file From 2692ae1d41848d43f966e8fa38bd29a318e532e7 Mon Sep 17 00:00:00 2001 From: Daniel Ericsson Date: Wed, 1 Mar 2023 19:49:35 +0100 Subject: [PATCH 02/21] feat #3 Implemented ScriptHandler unit tests Implemented tests for starting scripts and listing script intervals through ScriptHandler. Code coverage improved from 72% -> 84% --- evennia/scripts/tests.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..77786d125d 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -3,6 +3,7 @@ from unittest import TestCase, mock from parameterized import parameterized from evennia import DefaultScript +from evennia.objects.objects import DefaultObject from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script @@ -18,6 +19,42 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() +class ListIntervalsScript(DefaultScript): + """ + A script that does nothing. Used to test listing of script with nonzero intervals. + """ + def at_script_creation(self): + """ + Setup the script + """ + self.key = "interval_test" + self.desc = "This is an empty placeholder script." + self.interval = 1 + self.repeats = 1 + +class TestScriptHandler(BaseEvenniaTest): + """ + Test the ScriptHandler class. + + """ + def setUp(self): + self.obj, self.errors = DefaultObject.create("test_object") + + def tearDown(self): + self.obj.delete() + + def test_start(self): + "Check that ScriptHandler start function works correctly" + self.obj.scripts.add(ListIntervalsScript) + self.num = self.obj.scripts.start(self.obj.scripts.all()[0].key) + self.assertTrue(self.num == 1) + + def test_list_script_intervals(self): + "Checks that Scripthandler __str__ function lists script intervals correctly" + self.obj.scripts.add(ListIntervalsScript) + self.str = str(self.obj.scripts) + self.assertTrue("None/1" in self.str) + self.assertTrue("1 repeats" in self.str) class TestScriptDB(TestCase): "Check the singleton/static ScriptDB object works correctly" From 3a06c7dc9199ef0377f13e0b644a4edb61610964 Mon Sep 17 00:00:00 2001 From: hapeters Date: Wed, 1 Mar 2023 22:26:10 +0100 Subject: [PATCH 03/21] feat: #4 add tests to increase code coverage add test_store_key_raises_RunTimeError and test_remove_raises_RunTimeError to scripts/tests.py to increase code coverage for scripts/tickethandler.py --- evennia/scripts/tests.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..ef43abccbd 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -7,6 +7,7 @@ from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest +from evennia.scripts.tickerhandler import TickerHandler class TestScript(BaseEvenniaTest): @@ -18,6 +19,17 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() +class Test_improve_coverage(TestCase): + def test_store_key_raises_RunTimeError(self): + with self.assertRaises(RuntimeError): + th=TickerHandler() + th._store_key(None, None, 0, None) + + def test_remove_raises_RunTimeError(self): + with self.assertRaises(RuntimeError): + th=TickerHandler() + th.remove(callback=1) + class TestScriptDB(TestCase): "Check the singleton/static ScriptDB object works correctly" From e69dc8a1c3b09734cb4ac53b477d33d0ccc807b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Thu, 2 Mar 2023 01:18:37 +0100 Subject: [PATCH 04/21] feat: tests for add,remove in monitorhandler --- evennia/scripts/tests.py | 57 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e3cb46ddb..d767cdf830 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -7,7 +7,8 @@ from evennia.scripts.models import ObjectDoesNotExist, ScriptDB from evennia.scripts.scripts import DoNothing, ExtendedLoopingCall from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest - +from evennia.scripts.monitorhandler import MonitorHandler +import inspect class TestScript(BaseEvenniaTest): def test_create(self): @@ -88,3 +89,57 @@ class TestExtendedLoopingCall(TestCase): loopcall.__call__.assert_not_called() self.assertEqual(loopcall.interval, 20) loopcall._scheduleFrom.assert_called_with(121) +def dummy_func(): + return 0 +class TestMonitorHandler(TestCase): + def setUp(self): + self.handler = MonitorHandler() + + def test_add(self): + obj = mock.Mock() + fieldname = "db_add" + callback = dummy_func + idstring = "test" + self.assertEquals(inspect.isfunction(callback),True) + + self.handler.add(obj, fieldname, callback, idstring=idstring) + + self.assertIn(fieldname, self.handler.monitors[obj]) + self.assertIn(idstring, self.handler.monitors[obj][fieldname]) + self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) + + def test_remove(self): + obj = mock.Mock() + fieldname = 'db_remove' + callback = dummy_func + idstring = 'test_remove' + + self.handler.add(obj,fieldname,callback,idstring=idstring) + self.assertIn(fieldname,self.handler.monitors[obj]) + self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) + + self.handler.remove(obj,fieldname,idstring=idstring) + self.assertEquals(self.handler.monitors[obj][fieldname], {}) + + def test_add_with_invalid_callback_does_not_work(self): + obj = mock.Mock() + fieldname = "db_key" + callback = "not_a_function" + + self.handler.add(obj, fieldname, callback) + self.assertNotIn(fieldname, self.handler.monitors[obj]) + + """ def test_add_raise_exception(self): + obj = mock.Mock() + fieldname = "db_add" + callback = 1 + idstring = "test" + # self.assertEquals(inspect.isfunction(callback),True) + self.assertRaises(Exception,self.handler.add,obj, fieldname, callback, idstring=idstring) + """ + + + + + + From d4df18fd2801316030347522cb1cd12751f2bb49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Fri, 3 Mar 2023 16:53:49 +0100 Subject: [PATCH 05/21] fix:Removed unused commented out function --- evennia/scripts/tests.py | 9 --------- 1 file changed, 9 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index d767cdf830..776ab722aa 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -129,15 +129,6 @@ class TestMonitorHandler(TestCase): self.handler.add(obj, fieldname, callback) self.assertNotIn(fieldname, self.handler.monitors[obj]) - """ def test_add_raise_exception(self): - obj = mock.Mock() - fieldname = "db_add" - callback = 1 - idstring = "test" - # self.assertEquals(inspect.isfunction(callback),True) - self.assertRaises(Exception,self.handler.add,obj, fieldname, callback, idstring=idstring) - """ - From c481ae772d7d29a76cefb54a66909bf0cec3eabe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Fri, 3 Mar 2023 18:21:39 +0100 Subject: [PATCH 06/21] feat: added tests for all,clear #2 --- evennia/scripts/tests.py | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 41affece5f..8694a82057 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -12,6 +12,7 @@ from evennia.scripts.tickerhandler import TickerHandler from evennia.scripts.monitorhandler import MonitorHandler import inspect from evennia.scripts.manager import ScriptDBManager +from collections import defaultdict class TestScript(BaseEvenniaTest): def test_create(self): @@ -145,16 +146,16 @@ class TestExtendedLoopingCall(TestCase): def dummy_func(): return 0 + class TestMonitorHandler(TestCase): def setUp(self): self.handler = MonitorHandler() - + def test_add(self): obj = mock.Mock() fieldname = "db_add" callback = dummy_func idstring = "test" - self.assertEquals(inspect.isfunction(callback),True) self.handler.add(obj, fieldname, callback, idstring=idstring) @@ -183,6 +184,36 @@ class TestMonitorHandler(TestCase): self.handler.add(obj, fieldname, callback) self.assertNotIn(fieldname, self.handler.monitors[obj]) + def test_all(self): + obj = [mock.Mock(),mock.Mock()] + fieldname = ["db_all1","db_all2"] + callback = dummy_func + idstring = ["test_all1","test_all2"] + + self.handler.add(obj[0], fieldname[0], callback, idstring=idstring[0]) + self.handler.add(obj[1], fieldname[1], callback, idstring=idstring[1],persistent=True) + + output = self.handler.all() + self.assertEquals(output, + [(obj[0], fieldname[0], idstring[0], False, {}), + (obj[1], fieldname[1], idstring[1], True, {})]) + + def test_clear(self): + obj = mock.Mock() + fieldname = "db_add" + callback = dummy_func + idstring = "test" + + self.handler.add(obj, fieldname, callback, idstring=idstring) + self.assertIn(obj, self.handler.monitors) + + self.handler.clear() + self.assertNotIn(obj, self.handler.monitors) + self.assertEquals(defaultdict(lambda: defaultdict(dict)), self.handler.monitors) + + + + From 25e6fd9a3bec4c83cb2d6b5cc72aaffc3a8137ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Fri, 3 Mar 2023 18:31:12 +0100 Subject: [PATCH 07/21] doc: added documentation to added tests #2 --- evennia/scripts/tests.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 8694a82057..5120422f08 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -148,10 +148,15 @@ def dummy_func(): return 0 class TestMonitorHandler(TestCase): + """ + Test the MonitorHandler class. + """ + def setUp(self): self.handler = MonitorHandler() def test_add(self): + """Tests that adding an object to the monitor handler works correctly""" obj = mock.Mock() fieldname = "db_add" callback = dummy_func @@ -164,20 +169,20 @@ class TestMonitorHandler(TestCase): self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) def test_remove(self): + """Tests that removing an object from the monitor handler works correctly""" obj = mock.Mock() fieldname = 'db_remove' callback = dummy_func idstring = 'test_remove' + """Add an object to the monitor handler and then remove it""" self.handler.add(obj,fieldname,callback,idstring=idstring) - self.assertIn(fieldname,self.handler.monitors[obj]) - self.assertEqual(self.handler.monitors[obj][fieldname][idstring], (callback, False, {})) - self.handler.remove(obj,fieldname,idstring=idstring) self.assertEquals(self.handler.monitors[obj][fieldname], {}) - def test_add_with_invalid_callback_does_not_work(self): + def test_add_with_invalid_function(self): obj = mock.Mock() + """Tests that add method rejects objects where callback is not a function""" fieldname = "db_key" callback = "not_a_function" @@ -185,6 +190,7 @@ class TestMonitorHandler(TestCase): self.assertNotIn(fieldname, self.handler.monitors[obj]) def test_all(self): + """Tests that all method correctly returns information about added objects""" obj = [mock.Mock(),mock.Mock()] fieldname = ["db_all1","db_all2"] callback = dummy_func @@ -199,6 +205,7 @@ class TestMonitorHandler(TestCase): (obj[1], fieldname[1], idstring[1], True, {})]) def test_clear(self): + """Tests that the clear function correctly clears the monitor handler""" obj = mock.Mock() fieldname = "db_add" callback = dummy_func From 17f7c0750b9dada5680357bf0f09fb639d71e8a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Fri, 3 Mar 2023 19:49:14 +0100 Subject: [PATCH 08/21] feat: tests for add/remove attributes from monitorhandler --- evennia/scripts/tests.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 5120422f08..c4aec37a41 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -13,6 +13,7 @@ from evennia.scripts.monitorhandler import MonitorHandler import inspect from evennia.scripts.manager import ScriptDBManager from collections import defaultdict +from evennia.utils.dbserialize import dbserialize class TestScript(BaseEvenniaTest): def test_create(self): @@ -218,11 +219,26 @@ class TestMonitorHandler(TestCase): self.assertNotIn(obj, self.handler.monitors) self.assertEquals(defaultdict(lambda: defaultdict(dict)), self.handler.monitors) + def test_add_remove_attribute(self): + """Tests that adding and removing an object attribute to the monitor handler works correctly""" + obj = mock.Mock() + obj.name = "testaddattribute" + fieldname = "name" + callback = dummy_func + idstring = "test" + category = "testattribute" - - - - + """Add attribute to handler and assert that it has been added""" + self.handler.add(obj, fieldname, callback, idstring=idstring,category=category) + index = obj.attributes.get(fieldname, return_obj=True) + name = "db_value[testattribute]" + self.assertIn(name, self.handler.monitors[index]) + self.assertIn(idstring, self.handler.monitors[index][name]) + self.assertEqual(self.handler.monitors[index][name][idstring], (callback, False, {})) + """Remove attribute from the handler and assert that it is gone""" + self.handler.remove(obj,fieldname,idstring=idstring,category=category) + self.assertEquals(self.handler.monitors[index][name], {}) + \ No newline at end of file From f31b954bd7706ccaef7dcb56a326bd470c063955 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Sun, 5 Mar 2023 20:20:26 +0100 Subject: [PATCH 09/21] tests: #11 add test for invalid argument Tests invalid argument to start method in ExtendedLoopingCall class throws ValueError --- evennia/scripts/tests.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 51a244a1c9..aa0b97d1ec 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -143,6 +143,13 @@ class TestExtendedLoopingCall(TestCase): self.assertEqual(loopcall.interval, 20) loopcall._scheduleFrom.assert_called_with(121) + def test_start_invalid_interval(self): + """ Test the .start method with interval less than zero """ + with self.assertRaises(ValueError): + callback = mock.MagicMock() + loopcall = ExtendedLoopingCall(callback) + loopcall.start(-1, now=True, start_delay=None, count_start=1) + def dummy_func(): return 0 class TestMonitorHandler(TestCase): From d044e31f08af58bc90584996ca5cf9848e2fed01 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Sun, 5 Mar 2023 20:43:14 +0100 Subject: [PATCH 10/21] tests: #11 add test for __call__ Add test for __call__ in ExtendedLoopingCall class Test __call__ modifies start_delay and starttime if start_delay was previously set --- evennia/scripts/tests.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index aa0b97d1ec..e8e4868a3f 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -150,6 +150,19 @@ class TestExtendedLoopingCall(TestCase): loopcall = ExtendedLoopingCall(callback) loopcall.start(-1, now=True, start_delay=None, count_start=1) + def test__call__when_delay(self): + """ Test __call__ modifies start_delay and starttime if start_delay was previously set """ + callback = mock.MagicMock() + loopcall = ExtendedLoopingCall(callback) + loopcall.clock.seconds = mock.MagicMock(return_value=1) + loopcall.start_delay = 2 + loopcall.starttime = 0 + + loopcall() + + self.assertEqual(loopcall.start_delay, None) + self.assertEqual(loopcall.starttime, 1) + def dummy_func(): return 0 class TestMonitorHandler(TestCase): From 2e4bced35140f49fe38e3773eb482800e380cc2f Mon Sep 17 00:00:00 2001 From: Storsorken Date: Mon, 6 Mar 2023 01:24:22 +0100 Subject: [PATCH 11/21] Tests: #11 test force_repeat Test forcing script to run that is scheduled to run in the future --- evennia/scripts/tests.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index e8e4868a3f..00d3b3de67 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -163,6 +163,17 @@ class TestExtendedLoopingCall(TestCase): self.assertEqual(loopcall.start_delay, None) self.assertEqual(loopcall.starttime, 1) + def test_force_repeat(self): + """ Test forcing script to run that is scheduled to run in the future """ + callback = mock.MagicMock() + loopcall = ExtendedLoopingCall(callback) + loopcall.clock.seconds = mock.MagicMock(return_value=0) + + loopcall.start(20, now=False, start_delay=5, count_start=0) + loopcall.force_repeat() + + callback.assert_called_once() + def dummy_func(): return 0 class TestMonitorHandler(TestCase): From ddf51bd7022b70f678dc0306a163aa712770f62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pontus=20Pr=C3=BCzelius?= Date: Mon, 6 Mar 2023 21:54:18 +0100 Subject: [PATCH 12/21] doc: dummy_func explained --- evennia/scripts/tests.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index c4aec37a41..a97cfb1c47 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -144,7 +144,10 @@ class TestExtendedLoopingCall(TestCase): loopcall.__call__.assert_not_called() self.assertEqual(loopcall.interval, 20) loopcall._scheduleFrom.assert_called_with(121) - + +""" +Dummy function used as callback parameter +""" def dummy_func(): return 0 From 17a2cc2c90cacfe7d75687734868c20efceeac12 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Tue, 7 Mar 2023 19:36:47 +0100 Subject: [PATCH 13/21] fix: #18 clean up patch Fix white space changes. End of file newline has been re-added and and some unnecessary whitespace changes have been reverted --- evennia/scripts/tests.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 2530e0006e..471af8746f 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -109,9 +109,11 @@ class TestScriptDB(TestCase): # Check the script is not recreated as a side-effect self.assertFalse(self.scr in ScriptDB.objects.get_all_scripts()) + class TestExtendedLoopingCall(TestCase): """ Test the ExtendedLoopingCall class. + """ @mock.patch("evennia.scripts.scripts.LoopingCall") @@ -275,4 +277,3 @@ class TestMonitorHandler(TestCase): """Remove attribute from the handler and assert that it is gone""" self.handler.remove(obj,fieldname,idstring=idstring,category=category) self.assertEquals(self.handler.monitors[index][name], {}) - \ No newline at end of file From 6d1e85b198542b83efa33767a6db3afe56003658 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Tue, 7 Mar 2023 19:50:22 +0100 Subject: [PATCH 14/21] fix: #18 revert unnecessary newline change --- evennia/scripts/tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 471af8746f..14e8c46a96 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -15,6 +15,7 @@ from evennia.scripts.manager import ScriptDBManager from collections import defaultdict from evennia.utils.dbserialize import dbserialize + class TestScript(BaseEvenniaTest): def test_create(self): "Check the script can be created via the convenience method." From dd442e9338d97eb0ba3fd3dd85f8918d7c174dd7 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Wed, 8 Mar 2023 12:25:33 +0100 Subject: [PATCH 15/21] fix: #20 separate tests in Test_improve_coverage --- evennia/scripts/tests.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 14e8c46a96..1c21885c71 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -25,7 +25,7 @@ class TestScript(BaseEvenniaTest): self.assertFalse(errors, errors) mockinit.assert_called() -class Test_improve_coverage(TestCase): +class TestTickerHandler(TestCase): def test_store_key_raises_RunTimeError(self): with self.assertRaises(RuntimeError): th=TickerHandler() @@ -35,7 +35,8 @@ class Test_improve_coverage(TestCase): with self.assertRaises(RuntimeError): th=TickerHandler() th.remove(callback=1) - + +class TestScriptDBManager(TestCase): def test_not_obj_return_empty_list(self): manager_obj = ScriptDBManager() returned_list = manager_obj.get_all_scripts_on_obj(False) From 3b30f6f4a1bf584ea4587147b17d0e98a7c4af53 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Wed, 8 Mar 2023 13:20:26 +0100 Subject: [PATCH 16/21] fix: #21 fix imports --- evennia/scripts/tests.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 1c21885c71..6b7f05907d 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -1,4 +1,5 @@ from unittest import TestCase, mock +from collections import defaultdict from parameterized import parameterized @@ -10,9 +11,7 @@ from evennia.utils.create import create_script from evennia.utils.test_resources import BaseEvenniaTest from evennia.scripts.tickerhandler import TickerHandler from evennia.scripts.monitorhandler import MonitorHandler -import inspect from evennia.scripts.manager import ScriptDBManager -from collections import defaultdict from evennia.utils.dbserialize import dbserialize From 99d4f36bf6169588f901acee0b494c93e4f9c862 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Wed, 8 Mar 2023 13:22:39 +0100 Subject: [PATCH 17/21] docs: #21 move comment --- evennia/scripts/tests.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 6b7f05907d..f46db121cb 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -179,10 +179,8 @@ class TestExtendedLoopingCall(TestCase): callback.assert_called_once() -""" -Dummy function used as callback parameter -""" def dummy_func(): + """ Dummy function used as callback parameter """ return 0 class TestMonitorHandler(TestCase): From 5de52855d1cf846c512192d931cfd5874131bc06 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Wed, 8 Mar 2023 13:45:32 +0100 Subject: [PATCH 18/21] docs: #21 add missing docstrings Add missing docstrings for scripts/tests.py --- evennia/scripts/tests.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index f46db121cb..700e82e429 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -1,3 +1,8 @@ +""" +Unit tests for the scripts module + +""" + from unittest import TestCase, mock from collections import defaultdict @@ -25,18 +30,25 @@ class TestScript(BaseEvenniaTest): mockinit.assert_called() class TestTickerHandler(TestCase): + """ Test the TickerHandler class """ + def test_store_key_raises_RunTimeError(self): + """ Test _store_key method raises RuntimeError for interval < 1 """ with self.assertRaises(RuntimeError): th=TickerHandler() th._store_key(None, None, 0, None) def test_remove_raises_RunTimeError(self): + """ Test remove method raises RuntimeError for catching old ordering of arguments """ with self.assertRaises(RuntimeError): th=TickerHandler() th.remove(callback=1) class TestScriptDBManager(TestCase): + """ Test the ScriptDBManger class """ + def test_not_obj_return_empty_list(self): + """ Test get_all_scripts_on_obj returns empty list for falsy object """ manager_obj = ScriptDBManager() returned_list = manager_obj.get_all_scripts_on_obj(False) self.assertEqual(returned_list, []) From 80db329fadecd48da3b603b4b38c0d3d0f0cf93c Mon Sep 17 00:00:00 2001 From: Storsorken Date: Wed, 8 Mar 2023 13:55:19 +0100 Subject: [PATCH 19/21] docs: #21 fix comment --- evennia/scripts/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 700e82e429..7e4aa5f13f 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -1,5 +1,5 @@ """ -Unit tests for the scripts module +Unit tests for the scripts package """ From 12ad2d13abdb47a12ba83caba500eb48797c7197 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Mon, 13 Mar 2023 20:33:18 +0100 Subject: [PATCH 20/21] fix: rename ListIntervalsScript due to global name Rename ListIntervalsScript to TestingListIntervalScript to avoid potential name clashes --- evennia/scripts/tests.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index 7e4aa5f13f..e9b40a9626 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -53,7 +53,7 @@ class TestScriptDBManager(TestCase): returned_list = manager_obj.get_all_scripts_on_obj(False) self.assertEqual(returned_list, []) -class ListIntervalsScript(DefaultScript): +class TestingListIntervalScript(DefaultScript): """ A script that does nothing. Used to test listing of script with nonzero intervals. """ @@ -79,13 +79,13 @@ class TestScriptHandler(BaseEvenniaTest): def test_start(self): "Check that ScriptHandler start function works correctly" - self.obj.scripts.add(ListIntervalsScript) + self.obj.scripts.add(TestingListIntervalScript) self.num = self.obj.scripts.start(self.obj.scripts.all()[0].key) self.assertTrue(self.num == 1) def test_list_script_intervals(self): "Checks that Scripthandler __str__ function lists script intervals correctly" - self.obj.scripts.add(ListIntervalsScript) + self.obj.scripts.add(TestingListIntervalScript) self.str = str(self.obj.scripts) self.assertTrue("None/1" in self.str) self.assertTrue("1 repeats" in self.str) From 1c2154513045715039d0bc9610ecffc7ac3854c8 Mon Sep 17 00:00:00 2001 From: Storsorken Date: Mon, 13 Mar 2023 20:50:01 +0100 Subject: [PATCH 21/21] bug: stop repeating script before test ends Test might otherwise causing unexpected side effects --- evennia/scripts/tests.py | 1 + 1 file changed, 1 insertion(+) diff --git a/evennia/scripts/tests.py b/evennia/scripts/tests.py index e9b40a9626..b54f465044 100644 --- a/evennia/scripts/tests.py +++ b/evennia/scripts/tests.py @@ -188,6 +188,7 @@ class TestExtendedLoopingCall(TestCase): loopcall.start(20, now=False, start_delay=5, count_start=0) loopcall.force_repeat() + loopcall.stop() callback.assert_called_once()