def test_set_default_field_from_wire(self): doc = DocWithoutFields() doc = write_read(doc, DocWithoutFields, DocWithDefaultField) self.assertEquals(doc.field, FieldWithDefault.DEFAULT_VALUE) doc.field = b'value' doc = write_read(doc, DocWithDefaultField) self.assertEquals(doc.field, b'value')
def test_sorting(self): d = Doc() f1 = d.foos.create(label=b'1') f2 = d.foos.create(label=b'2') f3 = d.foos.create(label=b'3') f4 = d.foos.create(label=b'4') d.foos.sort(key=lambda f: f.label, reverse=True) f1.other = f3 f2.other = f1 f3.other = f2 f4.other = f4 d = write_read(d, Doc) self.assertEqual(len(d.foos), 4) f1, f2, f3, f4 = d.foos self.assertEqual(f1.label, b'4') self.assertEqual(f2.label, b'3') self.assertEqual(f3.label, b'2') self.assertEqual(f4.label, b'1') self.assertIs(f1.other, f1) self.assertIs(f2.other, f3) self.assertIs(f3.other, f4) self.assertIs(f4.other, f2)
def test_sorting(self): d = Doc() f1 = d.foos.create(label=b"1") f2 = d.foos.create(label=b"2") f3 = d.foos.create(label=b"3") f4 = d.foos.create(label=b"4") d.foos.sort(key=lambda f: f.label, reverse=True) f1.other = f3 f2.other = f1 f3.other = f2 f4.other = f4 d = write_read(d, Doc) self.assertEqual(len(d.foos), 4) f1, f2, f3, f4 = d.foos self.assertEqual(f1.label, b"4") self.assertEqual(f2.label, b"3") self.assertEqual(f3.label, b"2") self.assertEqual(f4.label, b"1") self.assertIs(f1.other, f1) self.assertIs(f2.other, f3) self.assertIs(f3.other, f4) self.assertIs(f4.other, f2)
def test_pointer(self): A = dr.make_ann('A', 'x', 'y', z=dr.SelfPointer(), __module__='SerialTest.test_pointer') B = dr.make_ann('B', p=dr.Pointer(A), __module__='SerialTest.test_pointer') class Doc(dr.Doc): sa = dr.Store(A) sb = dr.Store(B) class Meta: name = 'SerialTest.test_pointer.Doc' d = Doc() a1 = d.sa.create(x=1, y=2, z=None) a2 = d.sa.create(x=11, y=21, z=a1) d.sb.create(p=None) d.sb.create(p=a2) d = write_read(d, Doc) self.assertEqual(len(d.sa), 2) self.assertEqual(len(d.sb), 2) a1, a2 = d.sa b1, b2 = d.sb self.assertEqual(a1.x, 1) self.assertEqual(a1.y, 2) self.assertIsNone(a1.z) self.assertEqual(a2.x, 11) self.assertEqual(a2.y, 21) self.assertIs(a2.z, a1) self.assertIsNone(b1.p) self.assertIs(b2.p, a2)
def test_store_serial(self): d1 = Doc1() d1.xs.create(foo=1, bar=b"hello") d1.xs.create(foo=10, bar=b"world") d1.xs.create(foo=5) d1.xs.create(bar=b"bar") d3 = write_read(d1, Doc1, Doc3) self.assertFalse(hasattr(d3, "xs")) self.assertEqual(len(d3.exes), len(d1.xs)) for x, y in zip(d3.exes, d1.xs): self.assertEqual(x.foo, y.foo) self.assertEqual(x.bar, y.bar) d1 = write_read(d3, Doc3, Doc1) self.assertFalse(hasattr(d1, "exes"))
def test_pointer(self): doc = DocWithAnnotsAndPointer() doc.annots.create() self.assertEquals(len(doc.annots), 1) doc.special_annot = doc.annots[0] doc = write_read(doc, DocWithAnnotsAndPointer) self.assertIs(doc.special_annot, doc.annots[0])
def test_store_serial(self): d1 = Doc1() d1.xs.create(foo=1, bar=b'hello') d1.xs.create(foo=10, bar=b'world') d1.xs.create(foo=5) d1.xs.create(bar=b'bar') d3 = write_read(d1, Doc1, Doc3) self.assertFalse(hasattr(d3, 'xs')) self.assertEqual(len(d3.exes), len(d1.xs)) for x, y in zip(d3.exes, d1.xs): self.assertEqual(x.foo, y.foo) self.assertEqual(x.bar, y.bar) d1 = write_read(d3, Doc3, Doc1) self.assertFalse(hasattr(d1, 'exes'))
def test(self): d = Doc2() d.foo = 1 d.bar = 2 d = write_read(d, Doc2) self.assertEqual(d.foo, 1) self.assertEqual(d.bar, 2)
def test_store_empty(self): doc = Doc() doc.strings.create(utf8=u'', store_empty=u'') self.assertTrue(isinstance(doc.strings[0].utf8, six.text_type)) self.assertTrue(isinstance(doc.strings[0].store_empty, six.text_type)) doc = write_read(doc, Doc) self.assertIsNone(doc.strings[0].utf8) self.assertTrue(isinstance(doc.strings[0].store_empty, six.text_type))
def test_example(self): # a # b c # d e f d = Doc() n1 = d.nodes3.create(label='1') n1.parent = n1 nA = d.nodes2.create(label='A') nB = d.nodes2.create(label='B', parent=nA) nC = d.nodes2.create(label='C', parent=nB) nD = d.nodes2.create(label='D', parent=nC) nA.other = nD nB.other = nD nC.other = nD nD.other = nD na = d.nodes1.create(label='a', other=nD) nb = d.nodes1.create(label='b', parent=na, other=nC) nc = d.nodes1.create(label='c', parent=na, other=nB) nd = d.nodes1.create(label='d', parent=nb, other=nA) ne = d.nodes1.create(label='e', parent=nc, other=nD) nf = d.nodes1.create(label='f', parent=nc, other=nC) self.assertEqual(len(d.nodes1), 6) self.assertEqual(len(d.nodes2), 4) self.assertEqual(len(d.nodes3), 1) self.assertIsNone(na.parent) self.assertIs(nb.parent, na) self.assertIs(nc.parent, na) self.assertIs(nd.parent, nb) self.assertIs(ne.parent, nc) self.assertIs(nf.parent, nc) d = write_read(d, Doc) self.assertEqual(len(d.nodes1), 6) self.assertEqual(len(d.nodes2), 4) self.assertEqual(len(d.nodes3), 1) na, nb, nc, nd, ne, nf = d.nodes1 nA, nB, nC, nD = d.nodes2 n1, = d.nodes3 self.assertIsNone(na.parent) self.assertIs(nb.parent, na) self.assertIs(nc.parent, na) self.assertIs(nd.parent, nb) self.assertIs(ne.parent, nc) self.assertIs(nf.parent, nc) self.assertIs(na.other, nD) self.assertIs(nb.other, nC) self.assertIs(nc.other, nB) self.assertIs(nd.other, nA) self.assertIs(ne.other, nD) self.assertIs(nf.other, nC) self.assertIs(n1.parent, n1) self.assertIsNone(n1.other)
def test_example(self): # a # b c # d e f d = Doc() n1 = d.nodes3.create(label="1") n1.parent = n1 nA = d.nodes2.create(label="A") nB = d.nodes2.create(label="B", parent=nA) nC = d.nodes2.create(label="C", parent=nB) nD = d.nodes2.create(label="D", parent=nC) nA.other = nD nB.other = nD nC.other = nD nD.other = nD na = d.nodes1.create(label="a", other=nD) nb = d.nodes1.create(label="b", parent=na, other=nC) nc = d.nodes1.create(label="c", parent=na, other=nB) nd = d.nodes1.create(label="d", parent=nb, other=nA) ne = d.nodes1.create(label="e", parent=nc, other=nD) nf = d.nodes1.create(label="f", parent=nc, other=nC) self.assertEqual(len(d.nodes1), 6) self.assertEqual(len(d.nodes2), 4) self.assertEqual(len(d.nodes3), 1) self.assertIsNone(na.parent) self.assertIs(nb.parent, na) self.assertIs(nc.parent, na) self.assertIs(nd.parent, nb) self.assertIs(ne.parent, nc) self.assertIs(nf.parent, nc) d = write_read(d, Doc) self.assertEqual(len(d.nodes1), 6) self.assertEqual(len(d.nodes2), 4) self.assertEqual(len(d.nodes3), 1) na, nb, nc, nd, ne, nf = d.nodes1 nA, nB, nC, nD = d.nodes2 n1, = d.nodes3 self.assertIsNone(na.parent) self.assertIs(nb.parent, na) self.assertIs(nc.parent, na) self.assertIs(nd.parent, nb) self.assertIs(ne.parent, nc) self.assertIs(nf.parent, nc) self.assertIs(na.other, nD) self.assertIs(nb.other, nC) self.assertIs(nc.other, nB) self.assertIs(nd.other, nA) self.assertIs(ne.other, nD) self.assertIs(nf.other, nC) self.assertIs(n1.parent, n1) self.assertIsNone(n1.other)
def test(self): d = Doc() d.ann1s.create(foo=b'a') d.ann2s.create(foo=b'z', bar=1) d = write_read(d, Doc) self.assertEqual(len(d.ann1s), 1) self.assertEqual(len(d.ann2s), 1) self.assertEqual(d.ann1s[0].foo, b'a') self.assertEqual(d.ann2s[0].foo, b'z') self.assertEqual(d.ann2s[0].bar, 1)
def test_none_and_notnone(self): schema = Doc.schema() doc1 = Doc() doc1.events.create(name='Some event', date=datetime.datetime(year=1990, month=12, day=2)) doc1.events.create(name='Another event') self.assertIsNotNone(doc1.events[0].date) self.assertIsNone(doc1.events[1].date) doc2 = write_read(doc1, schema) self.assertIsNotNone(doc2.events[0].date) self.assertIsNone(doc2.events[1].date) self.assertEqual(doc1.events[0].date, doc2.events[0].date)
def test_deletion_bad(self): d = Doc() f1 = d.foos.create(label=b'1') f2 = d.foos.create(label=b'2') f3 = d.foos.create(label=b'3') f4 = d.foos.create(label=b'4') f1.other = f4 f2.other = f4 f3.other = f4 del d.foos[3] R = 'Cannot serialize pointer to .* as it is not not in any store' self.assertRaisesRegexp(WriterException, R, lambda: write_read(d, Doc))
def test_deletion_bad(self): d = Doc() f1 = d.foos.create(label=b"1") f2 = d.foos.create(label=b"2") f3 = d.foos.create(label=b"3") f4 = d.foos.create(label=b"4") f1.other = f4 f2.other = f4 f3.other = f4 del d.foos[3] R = "Cannot serialize pointer to .* as it is not not in any store" self.assertRaisesRegexp(WriterException, R, lambda: write_read(d, Doc))
def test_deletion(self): d = Doc() d.foos.create(label=b'1') d.foos.create(label=b'2') d.foos.create(label=b'3') d.foos.create(label=b'4') del d.foos[2:4] d = write_read(d, Doc) self.assertEqual(len(d.foos), 2) f1, f2 = d.foos self.assertEqual(f1.label, b'1') self.assertEqual(f2.label, b'2')
def test_deletion(self): d = Doc() d.foos.create(label=b"1") d.foos.create(label=b"2") d.foos.create(label=b"3") d.foos.create(label=b"4") del d.foos[2:4] d = write_read(d, Doc) self.assertEqual(len(d.foos), 2) f1, f2 = d.foos self.assertEqual(f1.label, b"1") self.assertEqual(f2.label, b"2")
def test_none_and_notnone(self): schema = Doc.schema() U = u'⁆foo' doc = Doc() doc.strings.create(utf8=U, utf32=U) doc.strings.create() self.assertTrue(isinstance(doc.strings[0].utf8, six.text_type)) self.assertTrue(isinstance(doc.strings[0].utf32, six.text_type)) doc = write_read(doc, schema) self.assertEqual(len(doc.strings), 2) self.assertTrue(isinstance(doc.strings[0].utf8, six.text_type)) self.assertTrue(isinstance(doc.strings[0].utf32, six.text_type)) self.assertEqual(doc.strings[0].utf8, U) self.assertEqual(doc.strings[0].utf32, U)
def test_various(self): doc = DocWithField() doc = write_read(doc, DocWithField) doc.field = b'foo' doc = write_read(doc, DocWithField, DocWithoutFields) doc = write_read(doc, DocWithoutFields, DocWithAnnotsAndPointer) doc.annots.create() doc.special_annot = doc.annots[-1] doc = write_read(doc, DocWithAnnotsAndPointer, DocWithoutFields) doc = write_read(doc, DocWithoutFields, DocWithField) self.assertEquals(doc.field, b'foo') doc = write_read(doc, DocWithField, DocWithoutFields) doc = write_read(doc, DocWithoutFields, DocWithAnnotsAndPointer) self.assertEquals(len(doc.annots), 1) self.assertEquals(doc.special_annot, doc.annots[0])
def test_use(self): Foo = dr.make_ann('Foo', 'a', 'b', 'c', 'd', e=dr.Slice(), __module__='SerialTest.test_use') class Doc(dr.Doc): foos = dr.Store(Foo) class Meta: name = 'SerialTest.test_use.Doc' d = Doc() d.foos.create(a=1, b=2, c=3, d=4, e=None) d.foos.create(a=4, b=3, c=2, d=1, e=slice(10, 21)) d.foos.create(x='y') self.assertEqual(len(d.foos), 3) d = write_read(d, Doc) self.assertEqual(len(d.foos), 3) f1, f2, f3 = d.foos self.assertEqual(f1.a, 1) self.assertEqual(f1.b, 2) self.assertEqual(f1.c, 3) self.assertEqual(f1.d, 4) self.assertIsNone(f1.e) self.assertEqual(f2.a, 4) self.assertEqual(f2.b, 3) self.assertEqual(f2.c, 2) self.assertEqual(f2.d, 1) self.assertEqual(f2.e, slice(10, 21)) self.assertIsNone(f3.a) self.assertIsNone(f3.b) self.assertIsNone(f3.c) self.assertIsNone(f3.d) self.assertIsNone(f3.e)
def test_doc1_doc1(self): d1 = Doc1(name=b"test.txt") self.assertEqual(len(d1._dr_stores), 1) self.assertIn("xs", d1._dr_stores) self.assertTrue(hasattr(d1, "name")) self.assertFalse(hasattr(d1, "filename")) self.assertEqual(d1.name, b"test.txt") d1.xs.create(foo=1, bar=b"hello") d1.xs.create(foo=10, bar=b"world") d1.xs.create(foo=5) d1.xs.create(bar=b"bar") self.assertEqual(len(d1.xs), 4) self.assertEqual(len([x for x in d1.xs]), 4) for x in d1.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, "foo")) self.assertTrue(hasattr(x, "bar")) self.assertFalse(hasattr(x, "chicken")) d2 = write_read(d1, Doc1) self.assertIsNot(d1, d2) self.assertIsInstance(d2, Doc1) self.assertTrue(hasattr(d2, "name")) self.assertFalse(hasattr(d2, "filename")) self.assertEqual(d2.name, b"test.txt") self.assertEqual(len(d2._dr_stores), 1) self.assertIn("xs", d2._dr_stores) self.assertEqual(len(d1.xs), len(d2.xs)) for x in d2.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, "foo")) self.assertTrue(hasattr(x, "bar")) self.assertFalse(hasattr(x, "chicken"))
def test_doc1_doc1(self): d1 = Doc1(name=b'test.txt') self.assertEqual(len(d1._dr_stores), 1) self.assertIn('xs', d1._dr_stores) self.assertTrue(hasattr(d1, 'name')) self.assertFalse(hasattr(d1, 'filename')) self.assertEqual(d1.name, b'test.txt') d1.xs.create(foo=1, bar=b'hello') d1.xs.create(foo=10, bar=b'world') d1.xs.create(foo=5) d1.xs.create(bar=b'bar') self.assertEqual(len(d1.xs), 4) self.assertEqual(len([x for x in d1.xs]), 4) for x in d1.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, 'foo')) self.assertTrue(hasattr(x, 'bar')) self.assertFalse(hasattr(x, 'chicken')) d2 = write_read(d1, Doc1) self.assertIsNot(d1, d2) self.assertIsInstance(d2, Doc1) self.assertTrue(hasattr(d2, 'name')) self.assertFalse(hasattr(d2, 'filename')) self.assertEqual(d2.name, b'test.txt') self.assertEqual(len(d2._dr_stores), 1) self.assertIn('xs', d2._dr_stores) self.assertEqual(len(d1.xs), len(d2.xs)) for x in d2.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, 'foo')) self.assertTrue(hasattr(x, 'bar')) self.assertFalse(hasattr(x, 'chicken'))
def test_different_doc(self): d1 = Doc1() d1.xs.create(foo=1, bar=b"hello") d1.xs.create(foo=10, bar=b"world") d1.xs.create(foo=5) d1.xs.create(bar=b"bar") d2 = write_read(d1, Doc1, Doc2) self.assertIsNot(d1, d2) self.assertIsInstance(d2, Doc2) self.assertEqual(len(d2._dr_stores), 1) self.assertIn("xs", d2._dr_stores) self.assertEqual(len(d1.xs), len(d2.xs)) for x in d2.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, "foo")) self.assertTrue(hasattr(x, "bar")) self.assertFalse(hasattr(x, "chicken"))
def test_different_doc(self): d1 = Doc1() d1.xs.create(foo=1, bar=b'hello') d1.xs.create(foo=10, bar=b'world') d1.xs.create(foo=5) d1.xs.create(bar=b'bar') d2 = write_read(d1, Doc1, Doc2) self.assertIsNot(d1, d2) self.assertIsInstance(d2, Doc2) self.assertEqual(len(d2._dr_stores), 1) self.assertIn('xs', d2._dr_stores) self.assertEqual(len(d1.xs), len(d2.xs)) for x in d2.xs: self.assertEqual(len(x._dr_fields), 2) self.assertEqual(len(x._dr_stores), 0) self.assertTrue(hasattr(x, 'foo')) self.assertTrue(hasattr(x, 'bar')) self.assertFalse(hasattr(x, 'chicken'))
def test_same_type(self): self.doc.favourite = self.doc.wrong_foos[2] with self.assertRaisesRegexp(WriterException, self.WRONG_STORE_MSG): write_read(self.doc, Doc)
def test_different_type(self): self.doc.favourite = self.doc.bars[2] with self.assertRaisesRegexp(WriterException, self.WRONG_STORE_MSG): write_read(self.doc, Doc)
def test_null_pointer(self): doc = DocWithAnnotsAndPointer() doc.annots.create() doc.special_annot = None doc = write_read(doc, DocWithAnnotsAndPointer) self.assertIsNone(doc.special_annot)