def test_fields_value_by_instance (self):
        class Person (Entity):
            firstname = Field(String)
            surname = Field(String)

        p1 = Person(firstname='Homer', surname='Simpson')
        p2 = Person(firstname='Bart', surname='Simpson')

        r = ReferenceMany()
        r.bind_to_entity(Person)

        self.assertFalse(p1 in r)
        self.assertFalse(p2 in r)

        r.set_data([p1])

        self.assertTrue(p1 in r)
        self.assertFalse(p2 in r)

        self.assertEqual(r[0].firstname, 'Homer')
        self.assertEqual(r[0].surname, 'Simpson')

        r.set_data([p2])

        self.assertFalse(p1 in r)
        self.assertTrue(p2 in r)

        self.assertEqual(r[0].firstname, 'Bart')
        self.assertEqual(r[0].surname, 'Simpson')

        r.append(p1)

        self.assertTrue(p1 in r)
        self.assertTrue(p2 in r)

        self.assertEqual(r[0].firstname, 'Bart')
        self.assertEqual(r[0].surname, 'Simpson')
        self.assertEqual(r[1].firstname, 'Homer')
        self.assertEqual(r[1].surname, 'Simpson')
    def test_type_by_instance (self):
        class Person (Entity):
            firstname = Field(String)
            surname = Field(String)

        p = Person(firstname='Homer', surname='Simpson')

        r = ReferenceMany()
        r.bind_to_entity(Person)

        r.set_data([p])

        self.assertTrue(isinstance(r.get_data(), ReferenceMany))
        self.assertTrue(isinstance(r[0], Entity))