mirror of
https://github.com/simon987/hexlib.git
synced 2025-04-04 02:12:59 +00:00
144 lines
3.0 KiB
Python
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)
|