catacomb/__init__.py: Implement equality and hashing for `KeyData' objects.
[catacomb-python] / t / t-key.py
index 20cadb1..bee107b 100644 (file)
@@ -188,7 +188,7 @@ class TestKeyFile (U.TestCase):
     k = kf.newkey(0x11111111, "first", exp)
     me.assertEqual(kf.modifiedp, True)
 
-    me.assertEqual(kf[0x11111111].id, 0x11111111)
+    me.assertEqual(k, kf[0x11111111])
     me.assertEqual(k.exptime, exp)
     me.assertEqual(k.deltime, exp)
     me.assertRaises(ValueError, setattr, k, "deltime", C.KEXP_FOREVER)
@@ -212,24 +212,6 @@ class TestKeyFile (U.TestCase):
                  "22222222:test integer,public:32519164 forever forever -")
 
 ###--------------------------------------------------------------------------
-
-def keydata_equalp(kd0, kd1):
-  if type(kd0) is not type(kd1): return False
-  elif type(kd0) is C.KeyDataBinary: return kd0.bin == kd1.bin
-  elif type(kd0) is C.KeyDataMP: return kd0.mp == kd1.mp
-  elif type(kd0) is C.KeyDataEncrypted: return kd0.ct == kd1.ct
-  elif type(kd0) is C.KeyDataECPt: return kd0.ecpt == kd1.ecpt
-  elif type(kd0) is C.KeyDataString: return kd0.str == kd1.str
-  elif type(kd0) is C.KeyDataStructured:
-    if len(kd0) != len(kd1): return False
-    for t, v0 in T.iteritems(kd0):
-      try: v1 = kd1[t]
-      except KeyError: return False
-      if not keydata_equalp(v0, v1): return False
-    return True
-  else:
-    raise SystemError("unexpected keydata type")
-
 class TestKeyData (U.TestCase):
 
   def test_flags(me):
@@ -266,10 +248,8 @@ class TestKeyData (U.TestCase):
     me.assertEqual(set(T.iterkeys(kd2)), set(["b"]))
 
   def check_encode(me, kd):
-    me.assertTrue(keydata_equalp(C.KeyData.decode(kd.encode()), kd))
-    kd1, tail = C.KeyData.read(kd.write())
-    me.assertEqual(tail, "")
-    me.assertTrue(keydata_equalp(kd, kd1))
+    me.assertEqual(C.KeyData.decode(kd.encode()), kd)
+    me.assertEqual(C.KeyData.read(kd.write()), (kd, ""))
 
   def test_bin(me):
     rng = T.detrand("kd-bin")
@@ -335,6 +315,13 @@ class TestKeyFileMapping (T.ImmutableMappingTextMixin):
 
     me.check_immutable_mapping(kf, model)
 
+class TestKeyStructMapping (T.MutableMappingTestMixin):
+  def _mkvalue(me, i): return C.KeyDataMP(i)
+  def _getvalue(me, v): return v.mp
+
+  def test_keystructmap(me):
+    me.check_mapping(C.KeyDataStructured)
+
 class TestKeyAttrMapping (T.MutableMappingTestMixin):
 
   def test_attrmap(me):