Add item lifetime controller interface

This commit is contained in:
lash
2022-01-31 11:23:51 +00:00
parent d2bca51342
commit 0eaf032b89
5 changed files with 184 additions and 8 deletions

79
tests/test_item.py Normal file
View File

@@ -0,0 +1,79 @@
# standard imports
import unittest
# local imports
from shep import State
from shep.error import (
StateExists,
StateItemExists,
StateInvalid,
StateItemNotFound,
)
class TestStateItems(unittest.TestCase):
def setUp(self):
self.states = State(4)
self.states.add('foo')
self.states.add('bar')
self.states.add('baz')
self.states.alias('xyzzy', self.states.BAZ | self.states.BAR)
self.states.alias('plugh', self.states.FOO | self.states.BAR)
def test_put(self):
item = b'foo'
# put in initial (no) state
self.states.put(item)
with self.assertRaises(StateItemExists):
self.states.put(item)
with self.assertRaises(StateItemExists):
self.states.put(item, self.states.BAZ)
def test_item_state(self):
item = b'foo'
self.states.put(item, self.states.XYZZY)
self.assertEqual(self.states.state(item), self.states.XYZZY)
def test_item_move(self):
item = b'foo'
self.states.put(item, self.states.FOO)
self.states.move(item, self.states.BAR)
self.assertEqual(self.states.state(item), self.states.BAR)
def test_item_move_from_alias(self):
item = b'foo'
self.states.put(item, self.states.FOO)
self.states.move(item, self.states.XYZZY)
self.assertEqual(self.states.state(item), self.states.XYZZY)
self.states.move(item, self.states.BAR)
self.assertEqual(self.states.state(item), self.states.BAR)
def test_item_move_from_new(self):
item = b'foo'
self.states.put(item)
self.assertEqual(self.states.state(item), self.states.NEW)
self.states.move(item, self.states.XYZZY)
self.assertEqual(self.states.state(item), self.states.XYZZY)
def test_item_purge(self):
item = b'foo'
self.states.put(item, self.states.BAZ)
self.assertEqual(self.states.state(item), self.states.BAZ)
self.states.purge(item)
with self.assertRaises(StateItemNotFound):
self.states.state(item)
if __name__ == '__main__':
unittest.main()