From 1bfce6b44c9b8462f66ff4c599bb2dfbdb5e53ab Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 14 Oct 2018 00:50:07 +0200 Subject: [PATCH] Specify seconday sorting to stabilize test case --- evennia/contrib/rpsystem.py | 2 +- evennia/contrib/tests.py | 32 +++++++++++++++++++++++--------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/evennia/contrib/rpsystem.py b/evennia/contrib/rpsystem.py index 34a78db166..5d1957bea5 100644 --- a/evennia/contrib/rpsystem.py +++ b/evennia/contrib/rpsystem.py @@ -238,7 +238,7 @@ def ordered_permutation_regex(sentence): solution.append(_PREFIX + r"[0-9]*%s*%s(?=\W|$)+" % (_NUM_SEP, re_escape(" ".join(comb)).rstrip("\\"))) # combine into a match regex, first matching the longest down to the shortest components - regex = r"|".join(sorted(set(solution), key=len, reverse=True)) + regex = r"|".join(sorted(set(solution), key=lambda item: (-len(item), item))) return regex diff --git a/evennia/contrib/tests.py b/evennia/contrib/tests.py index 8a61078e85..c3db584318 100644 --- a/evennia/contrib/tests.py +++ b/evennia/contrib/tests.py @@ -107,12 +107,22 @@ class TestRPSystem(EvenniaTest): def test_ordered_permutation_regex(self): self.assertEqual( rpsystem.ordered_permutation_regex(sdesc0), - '/[0-9]*-*A\\ nice\\ sender\\ of\\ emotes(?=\\W|$)+|/[0-9]*-*nice\\ sender\\ ' - 'of\\ emotes(?=\\W|$)+|/[0-9]*-*A\\ nice\\ sender\\ of(?=\\W|$)+|/[0-9]*-*sender\\ ' - 'of\\ emotes(?=\\W|$)+|/[0-9]*-*nice\\ sender\\ of(?=\\W|$)+|/[0-9]*-*A\\ nice\\ ' - 'sender(?=\\W|$)+|/[0-9]*-*nice\\ sender(?=\\W|$)+|/[0-9]*-*of\\ emotes(?=\\W|$)+' - '|/[0-9]*-*sender\\ of(?=\\W|$)+|/[0-9]*-*A\\ nice(?=\\W|$)+|/[0-9]*-*sender(?=\\W|$)+' - '|/[0-9]*-*emotes(?=\\W|$)+|/[0-9]*-*nice(?=\\W|$)+|/[0-9]*-*of(?=\\W|$)+|/[0-9]*-*A(?=\\W|$)+') + '/[0-9]*-*A\\ nice\\ sender\\ of\\ emotes(?=\\W|$)+|' + '/[0-9]*-*nice\\ sender\\ of\\ emotes(?=\\W|$)+|' + '/[0-9]*-*A\\ nice\\ sender\\ of(?=\\W|$)+|' + '/[0-9]*-*sender\\ of\\ emotes(?=\\W|$)+|' + '/[0-9]*-*nice\\ sender\\ of(?=\\W|$)+|' + '/[0-9]*-*A\\ nice\\ sender(?=\\W|$)+|' + '/[0-9]*-*nice\\ sender(?=\\W|$)+|' + '/[0-9]*-*of\\ emotes(?=\\W|$)+|' + '/[0-9]*-*sender\\ of(?=\\W|$)+|' + '/[0-9]*-*A\\ nice(?=\\W|$)+|' + '/[0-9]*-*emotes(?=\\W|$)+|' + '/[0-9]*-*sender(?=\\W|$)+|' + '/[0-9]*-*nice(?=\\W|$)+|' + '/[0-9]*-*of(?=\\W|$)+|' + '/[0-9]*-*A(?=\\W|$)+' + ) def test_sdesc_handler(self): self.speaker.sdesc.add(sdesc0) @@ -122,9 +132,13 @@ class TestRPSystem(EvenniaTest): self.speaker.sdesc.add("Testing three words") self.assertEqual( self.speaker.sdesc.get_regex_tuple()[0].pattern, - '/[0-9]*-*Testing\\ three\\ words(?=\\W|$)+|/[0-9]*-*Testing\\ ' - 'three(?=\\W|$)+|/[0-9]*-*three\\ words(?=\\W|$)+|/[0-9]*-*Testing' - '(?=\\W|$)+|/[0-9]*-*three(?=\\W|$)+|/[0-9]*-*words(?=\\W|$)+') + '/[0-9]*-*Testing\ three\ words(?=\W|$)+|' + '/[0-9]*-*Testing\ three(?=\W|$)+|' + '/[0-9]*-*three\ words(?=\W|$)+|' + '/[0-9]*-*Testing(?=\W|$)+|' + '/[0-9]*-*three(?=\W|$)+|' + '/[0-9]*-*words(?=\W|$)+' + ) def test_recog_handler(self): self.speaker.sdesc.add(sdesc0)