Ejemplo n.º 1
0
  def test_snapshot_list(self):
    a = TestLinkedList('A')
    b = TestLinkedList('B')
    c = TestLinkedList('C')
    a.next = b
    b.next = c

    snapshot = JsonSnapshot()
    self.assertIsNone(snapshot.find_entity_for_object(b))
    self.assertIsNone(snapshot.find_entity_for_object(b)) # Still none
    snapshot.add_object(a)
    json_object = snapshot.to_json_object()

    have_b = snapshot.find_entity_for_object(b)
    self.assertEquals(2, have_b.id)
    entity_b = snapshot.make_entity_for_object(b)
    self.assertEquals(id(have_b), id(entity_b))

    have_c = snapshot.find_entity_for_object(c)
    entity_c = snapshot.make_entity_for_object(c)
    self.assertEquals(id(have_c), id(entity_c))
    self.assertEquals(3, entity_c.id)

    expect = {
        '_subject_id': 1,
        '_type': 'JsonSnapshot',
        '_entities': [
            {'_id': 1, 'name': 'A', '_edges': [{'_to': 2}]},
            {'_id': 2, 'name': 'B', '_edges': [{'_to': 3}]},
            {'_id': 3, 'name': 'C'}]}

    self.assertItemsEqual(expect, json_object)
Ejemplo n.º 2
0
  def test_to_json_snapshot_value(self):
    """Test conversion of values."""
    snapshot = JsonSnapshot()

    # Primitive types dont affect snapshot.
    self.assertEquals(2, JsonSnapshotHelper.ToJsonSnapshotValue(2, snapshot))
    self.assertEquals(
        2.0, JsonSnapshotHelper.ToJsonSnapshotValue(2.0, snapshot))
    self.assertEquals(
        '2', JsonSnapshotHelper.ToJsonSnapshotValue('2', snapshot))
    self.assertEquals(
        [1, 2, 3], JsonSnapshotHelper.ToJsonSnapshotValue([1, 2, 3], snapshot))
    d = {'a': 'A', 'b': 2, 'c': [1, 2, 3]}
    self.assertEquals(
        d, JsonSnapshotHelper.ToJsonSnapshotValue(d, snapshot))
    self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

    # Wrapped values dont affect snapshot
    self.assertEquals(
        d,
        JsonSnapshotHelper.ToJsonSnapshotValue(TestWrappedValue(d), snapshot))
    self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

    # types dont affect snapshot
    self.assertEquals(
        'type dict',
        JsonSnapshotHelper.ToJsonSnapshotValue(dict, snapshot))
    self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

    # methods dont affect snapshot
    self.assertEquals(
        'Method "test_to_json_snapshot_value"',
        JsonSnapshotHelper.ToJsonSnapshotValue(
            self.test_to_json_snapshot_value, snapshot))
    self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

    # exceptions dont affect snapshot
    self.assertEquals(
      'KeyError: \'Hello, World\'',
        JsonSnapshotHelper.ToJsonSnapshotValue(KeyError('Hello, World'),
                                               snapshot))
    self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

    # JsonSnapshotableEntity definition written into snapshot
    ll = TestLinkedList('X')
    ref = JsonSnapshotHelper.ToJsonSnapshotValue(ll, snapshot)
    self.assertEquals({'_type': 'EntityReference', '_id': 1}, ref)
    expect = {'_type': 'JsonSnapshot',
              '_subject_id': 1,
              '_entities': {1: {'_id': 1,
                                'class': 'type TestLinkedList',
                                'name': 'X'}}
              }
    self.assertEquals(expect, snapshot.to_json_object())
    self.assertEquals(1, snapshot.find_entity_for_object(ll).id)
Ejemplo n.º 3
0
 def test_snapshot_make_entity(self):
   """Test snapshotting JsonSnapshotableEntity objects into entities."""
   elem = TestLinkedList('Hello')
   snapshot = JsonSnapshot()
   entity = snapshot.make_entity_for_object(elem)
   found = snapshot.find_entity_for_object(elem)
   self.assertEquals(found, entity)
   self.assertEquals(id(found), id(entity))
   self.assertItemsEqual({'_subject_id': 1,
                          '_type': 'JsonSnapshot',
                          '_entities': [{'_id': 1, 'name': 'Hello'}]},
                         snapshot.to_json_object())
Ejemplo n.º 4
0
 def test_snapshot_make_transitive_entity(self):
   """Test snapshotting compound entities."""
   elem = TestLinkedList('First', next_elem=TestLinkedList('Second'))
   snapshot = JsonSnapshot()
   snapshot.make_entity_for_object(elem)
   entity = snapshot.make_entity_for_object(elem.next)
   found = snapshot.find_entity_for_object(elem.next)
   self.assertEquals(found, entity)
   self.assertEquals(id(found), id(entity))
   self.assertItemsEqual({'_subject_id': 1,
                          '_type': 'JsonSnapshot',
                          '_entities': [{'_id': 1, 'name': 'First',
                                         '_edges':[{'_to': 2}]},
                                        {'_id': 2, 'name': 'Second'}]},
                         snapshot.to_json_object())
Ejemplo n.º 5
0
 def test_snapshot_make_entity(self):
     """Test snapshotting JsonSnapshotableEntity objects into entities."""
     elem = TestLinkedList('Hello')
     snapshot = JsonSnapshot()
     entity = snapshot.make_entity_for_object(elem)
     found = snapshot.find_entity_for_object(elem)
     self.assertEquals(found, entity)
     self.assertEquals(id(found), id(entity))
     self.assertItemsEqual(
         {
             '_subject_id': 1,
             '_type': 'JsonSnapshot',
             '_entities': [{
                 '_id': 1,
                 'name': 'Hello'
             }]
         }, snapshot.to_json_object())
Ejemplo n.º 6
0
    def test_to_json_snapshot_value(self):
        """Test conversion of values."""
        snapshot = JsonSnapshot()

        # Primitive types dont affect snapshot.
        self.assertEquals(2,
                          JsonSnapshotHelper.ToJsonSnapshotValue(2, snapshot))
        self.assertEquals(
            2.0, JsonSnapshotHelper.ToJsonSnapshotValue(2.0, snapshot))
        self.assertEquals(
            '2', JsonSnapshotHelper.ToJsonSnapshotValue('2', snapshot))
        self.assertEquals([1, 2, 3],
                          JsonSnapshotHelper.ToJsonSnapshotValue([1, 2, 3],
                                                                 snapshot))
        d = {'a': 'A', 'b': 2, 'c': [1, 2, 3]}
        self.assertEquals(d,
                          JsonSnapshotHelper.ToJsonSnapshotValue(d, snapshot))
        self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

        # Wrapped values dont affect snapshot
        self.assertEquals(
            d,
            JsonSnapshotHelper.ToJsonSnapshotValue(TestWrappedValue(d),
                                                   snapshot))
        self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

        # types dont affect snapshot
        self.assertEquals(
            'type dict',
            JsonSnapshotHelper.ToJsonSnapshotValue(dict, snapshot))
        self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

        # methods dont affect snapshot
        self.assertEquals(
            'Method "test_to_json_snapshot_value"',
            JsonSnapshotHelper.ToJsonSnapshotValue(
                self.test_to_json_snapshot_value, snapshot))
        self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

        # exceptions dont affect snapshot
        self.assertEquals(
            'KeyError: \'Hello, World\'',
            JsonSnapshotHelper.ToJsonSnapshotValue(KeyError('Hello, World'),
                                                   snapshot))
        self.assertEquals({'_type': 'JsonSnapshot'}, snapshot.to_json_object())

        # JsonSnapshotableEntity definition written into snapshot
        ll = TestLinkedList('X')
        ref = JsonSnapshotHelper.ToJsonSnapshotValue(ll, snapshot)
        self.assertEquals({'_type': 'EntityReference', '_id': 1}, ref)
        expect = {
            '_type': 'JsonSnapshot',
            '_subject_id': 1,
            '_entities': {
                1: {
                    '_id': 1,
                    'class': 'type TestLinkedList',
                    'name': 'X'
                }
            }
        }
        self.assertEquals(expect, snapshot.to_json_object())
        self.assertEquals(1, snapshot.find_entity_for_object(ll).id)