Changed how duplicates is passed down the cmdset merge stack.
This commit is contained in:
parent
edacd58eab
commit
cc76de348e
2 changed files with 21 additions and 9 deletions
|
|
@ -391,11 +391,11 @@ class CmdSet(with_metaclass(_CmdSetMeta, object)):
|
||||||
cmdset_c = self._union(cmdset_a, self)
|
cmdset_c = self._union(cmdset_a, self)
|
||||||
|
|
||||||
# pass through options whenever they are set, unless the merging or higher-prio
|
# pass through options whenever they are set, unless the merging or higher-prio
|
||||||
# set changes the setting (i.e. has a non-None value).
|
# set changes the setting (i.e. has a non-None value). We don't pass through
|
||||||
|
# the duplicates setting; that is per-merge
|
||||||
cmdset_c.no_channels = self.no_channels if cmdset_a.no_channels is None else cmdset_a.no_channels
|
cmdset_c.no_channels = self.no_channels if cmdset_a.no_channels is None else cmdset_a.no_channels
|
||||||
cmdset_c.no_exits = self.no_exits if cmdset_a.no_exits is None else cmdset_a.no_exits
|
cmdset_c.no_exits = self.no_exits if cmdset_a.no_exits is None else cmdset_a.no_exits
|
||||||
cmdset_c.no_objs = self.no_objs if cmdset_a.no_objs is None else cmdset_a.no_objs
|
cmdset_c.no_objs = self.no_objs if cmdset_a.no_objs is None else cmdset_a.no_objs
|
||||||
cmdset_c.duplicates = self.duplicates if cmdset_a.duplicates is None else cmdset_a.duplicates
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# B higher priority than A
|
# B higher priority than A
|
||||||
|
|
@ -415,11 +415,11 @@ class CmdSet(with_metaclass(_CmdSetMeta, object)):
|
||||||
cmdset_c = self._union(self, cmdset_a)
|
cmdset_c = self._union(self, cmdset_a)
|
||||||
|
|
||||||
# pass through options whenever they are set, unless the higher-prio
|
# pass through options whenever they are set, unless the higher-prio
|
||||||
# set changes the setting (i.e. has a non-None value).
|
# set changes the setting (i.e. has a non-None value). We don't pass through
|
||||||
|
# the duplicates setting; that is per-merge
|
||||||
cmdset_c.no_channels = cmdset_a.no_channels if self.no_channels is None else self.no_channels
|
cmdset_c.no_channels = cmdset_a.no_channels if self.no_channels is None else self.no_channels
|
||||||
cmdset_c.no_exits = cmdset_a.no_exits if self.no_exits is None else self.no_exits
|
cmdset_c.no_exits = cmdset_a.no_exits if self.no_exits is None else self.no_exits
|
||||||
cmdset_c.no_objs = cmdset_a.no_objs if self.no_objs is None else self.no_objs
|
cmdset_c.no_objs = cmdset_a.no_objs if self.no_objs is None else self.no_objs
|
||||||
cmdset_c.duplicates = cmdset_a.duplicates if self.duplicates is None else self.duplicates
|
|
||||||
|
|
||||||
# we store actual_mergetype since key_mergetypes
|
# we store actual_mergetype since key_mergetypes
|
||||||
# might be different from the main mergetype.
|
# might be different from the main mergetype.
|
||||||
|
|
|
||||||
|
|
@ -186,7 +186,7 @@ class TestCmdSetMergers(TestCase):
|
||||||
self.assertTrue(cmdset_f.no_exits)
|
self.assertTrue(cmdset_f.no_exits)
|
||||||
self.assertTrue(cmdset_f.no_objs)
|
self.assertTrue(cmdset_f.no_objs)
|
||||||
self.assertTrue(cmdset_f.no_channels)
|
self.assertTrue(cmdset_f.no_channels)
|
||||||
self.assertTrue(cmdset_f.duplicates)
|
self.assertFalse(cmdset_f.duplicates)
|
||||||
self.assertEqual(len(cmdset_f.commands), 4)
|
self.assertEqual(len(cmdset_f.commands), 4)
|
||||||
a.priority = 2
|
a.priority = 2
|
||||||
b.priority = 1
|
b.priority = 1
|
||||||
|
|
@ -198,7 +198,7 @@ class TestCmdSetMergers(TestCase):
|
||||||
self.assertTrue(cmdset_f.no_channels)
|
self.assertTrue(cmdset_f.no_channels)
|
||||||
self.assertTrue(cmdset_f.duplicates)
|
self.assertTrue(cmdset_f.duplicates)
|
||||||
self.assertEqual(len(cmdset_f.commands), 4)
|
self.assertEqual(len(cmdset_f.commands), 4)
|
||||||
cmdset_f = a + b + c + d # forward, A top priority
|
cmdset_f = a + b + c + d # forward, A top priority. This never happens in practice.
|
||||||
self.assertTrue(cmdset_f.no_exits)
|
self.assertTrue(cmdset_f.no_exits)
|
||||||
self.assertTrue(cmdset_f.no_objs)
|
self.assertTrue(cmdset_f.no_objs)
|
||||||
self.assertTrue(cmdset_f.no_channels)
|
self.assertTrue(cmdset_f.no_channels)
|
||||||
|
|
@ -208,17 +208,17 @@ class TestCmdSetMergers(TestCase):
|
||||||
b.priority = 0
|
b.priority = 0
|
||||||
c.priority = 1
|
c.priority = 1
|
||||||
d.priority = 2
|
d.priority = 2
|
||||||
cmdset_f = d + c + b + a # reverse, A low prio
|
cmdset_f = d + c + b + a # reverse, A low prio. This never happens in practice.
|
||||||
self.assertTrue(cmdset_f.no_exits)
|
self.assertTrue(cmdset_f.no_exits)
|
||||||
self.assertTrue(cmdset_f.no_objs)
|
self.assertTrue(cmdset_f.no_objs)
|
||||||
self.assertTrue(cmdset_f.no_channels)
|
self.assertTrue(cmdset_f.no_channels)
|
||||||
self.assertTrue(cmdset_f.duplicates)
|
self.assertFalse(cmdset_f.duplicates)
|
||||||
self.assertEqual(len(cmdset_f.commands), 4)
|
self.assertEqual(len(cmdset_f.commands), 4)
|
||||||
cmdset_f = a + b + c + d # forward, A low prio
|
cmdset_f = a + b + c + d # forward, A low prio
|
||||||
self.assertTrue(cmdset_f.no_exits)
|
self.assertTrue(cmdset_f.no_exits)
|
||||||
self.assertTrue(cmdset_f.no_objs)
|
self.assertTrue(cmdset_f.no_objs)
|
||||||
self.assertTrue(cmdset_f.no_channels)
|
self.assertTrue(cmdset_f.no_channels)
|
||||||
self.assertTrue(cmdset_f.duplicates)
|
self.assertFalse(cmdset_f.duplicates)
|
||||||
self.assertEqual(len(cmdset_f.commands), 4)
|
self.assertEqual(len(cmdset_f.commands), 4)
|
||||||
c.no_exits = False
|
c.no_exits = False
|
||||||
b.no_objs = False
|
b.no_objs = False
|
||||||
|
|
@ -322,6 +322,18 @@ class TestGetAndMergeCmdSets(TwistedTestCase, EvenniaTest):
|
||||||
deferred.addCallback(_callback)
|
deferred.addCallback(_callback)
|
||||||
return deferred
|
return deferred
|
||||||
|
|
||||||
|
def test_duplicates(self):
|
||||||
|
a, b, c, d = self.cmdset_a, self.cmdset_b, self.cmdset_c, self.cmdset_d
|
||||||
|
a.no_exits = True
|
||||||
|
a.no_channels = True
|
||||||
|
b.duplicates = True
|
||||||
|
d.duplicates = True
|
||||||
|
self.set_cmdsets(self.obj1, a, b, c, d)
|
||||||
|
deferred = cmdhandler.get_and_merge_cmdsets(self.obj1, None, None, self.obj1, "object")
|
||||||
|
def _callback(cmdset):
|
||||||
|
self.assertEqual(len(cmdset.commands), 9)
|
||||||
|
deferred.addCallback(_callback)
|
||||||
|
return deferred
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue