Fix unittests for funcparser refactor

This commit is contained in:
Griatch 2021-03-26 23:37:21 +01:00
parent a3a57314a1
commit 7891987e05
6 changed files with 68 additions and 312 deletions

View file

@ -338,225 +338,19 @@ class TestProtLib(EvenniaTest):
self.assertEqual(match, [self.prot])
@override_settings(PROT_FUNC_MODULES=["evennia.prototypes.protfuncs"], CLIENT_DEFAULT_WIDTH=20)
class TestProtFuncs(EvenniaTest):
def setUp(self):
super(TestProtFuncs, self).setUp()
self.prot = {
"prototype_key": "test_prototype",
"prototype_desc": "testing prot",
"key": "ExampleObj",
}
@mock.patch("evennia.prototypes.protfuncs.base_random", new=mock.MagicMock(return_value=0.5))
@mock.patch("evennia.prototypes.protfuncs.base_randint", new=mock.MagicMock(return_value=5))
def test_protfuncs(self):
self.assertEqual(protlib.protfunc_parser("$random()"), 0.5)
self.assertEqual(protlib.protfunc_parser("$randint(1, 10)"), 5)
self.assertEqual(protlib.protfunc_parser("$left_justify( foo )"), "foo ")
self.assertEqual(protlib.protfunc_parser("$right_justify( foo )"), " foo")
self.assertEqual(protlib.protfunc_parser("$center_justify(foo )"), " foo ")
self.assertEqual(
protlib.protfunc_parser("$full_justify(foo bar moo too)"), "foo bar moo too"
)
self.assertEqual(
protlib.protfunc_parser("$right_justify( foo )", testing=True),
("unexpected indent (<unknown>, line 1)", " foo"),
)
@override_settings(PROT_FUNC_MODULES=["evennia.prototypes.protfuncs"])
def test_protkey_protfunc(self):
test_prot = {"key1": "value1", "key2": 2}
self.assertEqual(
protlib.protfunc_parser("$protkey(key1)", testing=True, prototype=test_prot),
(None, "value1"),
"value1",
)
self.assertEqual(
protlib.protfunc_parser("$protkey(key2)", testing=True, prototype=test_prot), (None, 2)
)
self.assertEqual(protlib.protfunc_parser("$add(1, 2)"), 3)
self.assertEqual(protlib.protfunc_parser("$add(10, 25)"), 35)
self.assertEqual(
protlib.protfunc_parser("$add([1,2,3], [4,5,6])"), [1, 2, 3, 4, 5, 6])
self.assertEqual(
protlib.protfunc_parser("$add('[1,2,3]', '[4,5,6]')"), "[1,2,3][4,5,6]")
self.assertEqual(protlib.protfunc_parser("$add(foo, bar)"), "foobar")
self.assertEqual(protlib.protfunc_parser("$add(foo,' bar')"), "foo bar")
self.assertEqual(protlib.protfunc_parser("$sub(5, 2)"), 3)
self.assertRaises(TypeError, protlib.protfunc_parser, "$sub(5, test)")
self.assertEqual(protlib.protfunc_parser("$mult(5, 2)"), 10)
self.assertEqual(protlib.protfunc_parser("$mult( 5 , 10)"), 50)
self.assertEqual(protlib.protfunc_parser("$mult('foo',3)"), "foofoofoo")
self.assertEqual(protlib.protfunc_parser("$mult(foo,3)"), "foofoofoo")
self.assertRaises(TypeError, protlib.protfunc_parser, "$mult(foo, foo)")
self.assertEqual(protlib.protfunc_parser("$toint(5.3)"), 5)
self.assertEqual(protlib.protfunc_parser("$div(5, 2)"), 2.5)
self.assertEqual(protlib.protfunc_parser("$toint($div(5, 2))"), 2)
self.assertEqual(protlib.protfunc_parser("$sub($add(5, 3), $add(10, 2))"), -4)
self.assertEqual(protlib.protfunc_parser("$eval('2')"), "2")
self.assertEqual(
protlib.protfunc_parser("$eval(['test', 1, '2', 3.5, \"foo\"])"),
["test", 1, "2", 3.5, "foo"],
)
self.assertEqual(
protlib.protfunc_parser("$eval({'test': '1', 2:3, 3: $toint(3.5)})"),
{"test": "1", 2: 3, 3: 3},
)
# no object search
odbref = self.obj1.dbref
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("obj({})".format(odbref), session=self.session),
"obj({})".format(odbref),
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("dbref({})".format(odbref), session=self.session),
"dbref({})".format(odbref),
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("stone(#12345)", session=self.session), "stone(#12345)"
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(protlib.protfunc_parser(odbref, session=self.session), odbref)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(protlib.protfunc_parser("#12345", session=self.session), "#12345")
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("nothing({})".format(odbref), session=self.session),
"nothing({})".format(odbref),
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(protlib.protfunc_parser("(#12345)", session=self.session), "(#12345)")
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("obj(Char)", session=self.session), "obj(Char)"
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("objlist({})".format(odbref), session=self.session),
"objlist({})".format(odbref),
)
mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("dbref(Char)", session=self.session), "dbref(Char)"
)
mocked__obj_search.assert_not_called()
# obj search happens
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("$objlist({})".format(odbref), session=self.session),
[odbref],
)
mocked__obj_search.assert_called_once()
assert (odbref,) == mocked__obj_search.call_args[0]
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("$obj({})".format(odbref), session=self.session), odbref
)
mocked__obj_search.assert_called_once()
assert (odbref,) == mocked__obj_search.call_args[0]
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(
protlib.protfunc_parser("$dbref({})".format(odbref), session=self.session), odbref
)
mocked__obj_search.assert_called_once()
assert (odbref,) == mocked__obj_search.call_args[0]
cdbref = self.char1.dbref
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertEqual(protlib.protfunc_parser("$obj(Char)", session=self.session), cdbref)
mocked__obj_search.assert_called_once()
assert ("Char",) == mocked__obj_search.call_args[0]
# bad invocation
# with mock.patch(
# "evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
# ) as mocked__obj_search:
# self.assertEqual(
# protlib.protfunc_parser("$badfunc(#112345)", session=self.session), "<UNKNOWN>"
# )
# mocked__obj_search.assert_not_called()
with mock.patch(
"evennia.prototypes.protfuncs._obj_search", wraps=protofuncs._obj_search
) as mocked__obj_search:
self.assertRaises(ValueError, protlib.protfunc_parser, "$dbref(Char)")
mocked__obj_search.assert_not_called()
self.assertEqual(
protlib.value_to_obj(protlib.protfunc_parser(cdbref, session=self.session)), self.char1
)
self.assertEqual(
protlib.value_to_obj_or_any(protlib.protfunc_parser(cdbref, session=self.session)),
self.char1,
)
self.assertEqual(
protlib.value_to_obj_or_any(
protlib.protfunc_parser("[1,2,3,'{}',5]".format(cdbref), session=self.session)
),
[1, 2, 3, self.char1, 5],
protlib.protfunc_parser("$protkey(key2)", testing=True, prototype=test_prot),
2
)