hexlib/test/test_PersistentState.py
2023-02-25 15:38:40 -05:00

144 lines
3.0 KiB
Python

import os
from unittest import TestCase
from hexlib.db import PersistentState
class TestPersistentState(TestCase):
def tearDown(self) -> None:
if os.path.exists("state.db"):
os.remove("state.db")
def setUp(self) -> None:
if os.path.exists("state.db"):
os.remove("state.db")
def test_get_set(self):
s = PersistentState()
val = {"a": 1, "b": "2", "c": b'3', "d": 4.4}
s["a"]["1"] = val
val["id"] = "1"
self.assertDictEqual(val, s["a"]["1"])
def test_get_set_int_id(self):
s = PersistentState()
val = {"a": 1, "b": "2", "c": b'3', "d": 4.4}
s["a"][1] = val
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_update_partial(self):
s = PersistentState()
val = {"a": 1, "b": "2", "c": b'3', "d": 4.4}
s["a"][1] = val
s["a"][1] = {
"a": 2
}
val["a"] = 2
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_none(self):
s = PersistentState()
val = {"a": 1, "b": None}
s["a"][1] = val
s["a"][1] = {
"a": None
}
val["a"] = None
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_bool(self):
s = PersistentState()
val = {"a": True, "b": False}
s["a"][1] = val
s["a"][1] = {
"a": True
}
val["a"] = True
val["id"] = 1
self.assertDictEqual(val, s["a"][1])
def test_sql(self):
s = PersistentState()
s["a"][1] = {"a": True}
s["a"][2] = {"a": False}
s["a"][3] = {"a": True}
items = list(s["a"].sql("WHERE a=0 ORDER BY id"))
self.assertDictEqual(items[0], s["a"][2])
def test_delitem(self):
s = PersistentState()
s["a"][1] = {"a": True}
del s["a"][1]
self.assertIsNone(s["a"][1])
def test_delitem_nonexistent(self):
s = PersistentState()
s["a"][1] = {"a": True}
del s["a"][456]
self.assertIsNotNone(s["a"][1])
def test_delitem_no_table(self):
s = PersistentState()
try:
del s["a"][456]
except Exception as e:
self.fail(e)
def test_deserialize_get_set(self):
s = PersistentState()
s["a"][0] = {"x": b'abc'}
self.assertEqual(s["a"][0]["x"], b'abc')
def test_deserialize_sql(self):
s = PersistentState()
s["a"][0] = {"x": b'abc'}
self.assertEqual(list(s["a"].sql("WHERE 1=1"))[0]["x"], b'abc')
def test_deserialize_iter(self):
s = PersistentState()
s["a"][0] = {"x": b'abc'}
self.assertEqual(list(s["a"])[0]["x"], b'abc')
def test_drop_table(self):
s = PersistentState()
s["a"][0] = {"x": 1}
s["a"][1] = {"x": 2}
self.assertEqual(len(list(s["a"])), 2)
del s["a"]
self.assertEqual(len(list(s["a"])), 0)