def test_bulk_data(self):
        self.setUpForObject(BulkDataSpecimen())
        cell = self.object.state()['s']
        self.object.queue.insert_tail(make_bytes_msg(b'ab'))

        # TODO: do this once initial values are processed correctly rather than having extra get()s
        # poll cell to force queue contents to show up in initial state to test json representation
        # st = SubscriptionTester()
        # _, subscription = cell.subscribe2(lambda v: None, st.context)
        # st.advance()
        # subscription.unsubscribe()

        description = cell.description()
        self.assertEqual(
            self.getUpdates(),
            transform_for_json([
                [u'register_block', 1, u'urlroot', []],
                [u'register_cell', 2, u'urlroot/s', description, []],
                [u'value', 1, {
                    u's': 2
                }],
                [u'value', 0, 1],
                ['actually_binary', b'\x02\x00\x00\x00\x01a'],
                ['actually_binary', b'\x02\x00\x00\x00\x01b'],
            ]))
        self.object.queue.insert_tail(make_bytes_msg(b'cd'))
        self.assertEqual(
            self.getUpdates(),
            transform_for_json([
                ['actually_binary', b'\x02\x00\x00\x00\x02c'],
                ['actually_binary', b'\x02\x00\x00\x00\x02d'],
            ]))
    def test_bulk_data(self):
        self.setUpForObject(BulkDataSpecimen())
        cell = self.object.state()['s']
        yield _append_to_sink_cell(cell, b'ab')

        description = cell.description()
        self.assertEqual(
            self.getUpdates(),
            transform_for_json([
                ['register_block', 1, 'urlroot', []],
                ['register_cell', 2, 'urlroot/s', description, []],
                ['value', 1, {
                    's': 2
                }],
                ['value', 0, 1],
                ['actually_binary', b'\x02\x00\x00\x00\x01a'],
                ['actually_binary', b'\x02\x00\x00\x00\x01b'],
            ]))
        yield _append_to_sink_cell(cell, b'cd')
        self.assertEqual(
            self.getUpdates(),
            transform_for_json([
                ['actually_binary', b'\x02\x00\x00\x00\x02c'],
                ['actually_binary', b'\x02\x00\x00\x00\x02d'],
            ]))
Exemple #3
0
 def test_two_references(self):
     """Two references are handled correctly, including not deleting until both are gone."""
     self.setUpForObject(DuplicateReferenceSpecimen())
     self.assertEqual(self.getUpdates(), transform_for_json([
         [u'register_block', 1, u'urlroot', []],
         [u'register_cell', 2, u'urlroot/foo', self.object.state()['foo'].description(), None],
         [u'register_block', 3, u'urlroot/foo', [u'shinysdr.values.INull']],
         [u'value', 3, {}],
         [u'value', 2, 3],
         [u'register_cell', 4, u'urlroot/bar', self.object.state()['bar'].description(), None],
         [u'value', 4, 3],
         [u'value', 1, {u'bar': 4, u'foo': 2}],
         [u'value', 0, 1],
     ]))
     replacement = NullExportedState()
     # becomes distinct
     self.object.bar = replacement
     self.object.state_changed()
     self.assertEqual(self.getUpdates(), [
         [u'register_block', 5, u'urlroot/bar', [u'shinysdr.values.INull']],
         [u'value', 5, {}],
         [u'value', 4, 5]
     ])
     # old value should be deleted
     self.object.foo = replacement
     self.object.state_changed()
     self.assertEqual(self.getUpdates(), [
         [u'value', 2, 5],
         [u'delete', 3]
     ])
Exemple #4
0
    def test_collection_delete(self):
        d = CellDict({'a': ExportedState()}, dynamic=True)
        self.setUpForObject(CollectionState(d))

        self.assertEqual(
            self.getUpdates(),
            transform_for_json([
                ['register_block', 1, 'urlroot', []],
                [
                    'register_cell', 2, 'urlroot/a',
                    self.object.state()['a'].description()
                ],
                ['register_block', 3, 'urlroot/a', []],
                ['value', 3, {}],
                ['value', 2, 3],
                ['value', 1, {
                    'a': 2
                }],
                ['value', 0, 1],
            ]))
        self.assertEqual(self.getUpdates(), [])
        del d['a']
        self.assertEqual(self.getUpdates(), [
            ['value', 1, {}],
            ['delete', 2],
            ['delete', 3],
        ])
Exemple #5
0
 def test_value_patch(self):
     cell = StringSinkCell(encoding='us-ascii')
     yield _append_to_sink_cell(cell, b'ab')
     self.setUpForObject(Cells({
         's': cell
     }))
     self.st.advance()
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['register_block', 1, 'urlroot', []],
         ['register_cell', 2, 'urlroot/s', cell.description(), 'ab'],
         ['value', 1, {'s': 2}],
         ['value', 0, 1],
     ]))
     yield _append_to_sink_cell(cell, b'cd')
     self.st.advance()
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['value_append', 2, 'cd'],
     ]))
Exemple #6
0
 def test_bulk_data(self):
     self.setUpForObject(BulkDataSpecimen())
     cell = self.object.state()['s']
     yield _append_to_sink_cell(cell, b'ab')
     
     description = cell.description()
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['register_block', 1, 'urlroot', []],
         ['register_cell', 2, 'urlroot/s', description, []],
         ['value', 1, {'s': 2}],
         ['value', 0, 1],
         ['actually_binary', b'\x02\x00\x00\x00\x01a'],
         ['actually_binary', b'\x02\x00\x00\x00\x01b'],
     ]))
     yield _append_to_sink_cell(cell, b'cd')
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['actually_binary', b'\x02\x00\x00\x00\x02c'],
         ['actually_binary', b'\x02\x00\x00\x00\x02d'],
     ]))
Exemple #7
0
 def test_send_set_wrong_target(self):
     # Raised exception will be logged safely by the wrappper.
     # TODO: Instead of raising, report the error associated with the connection somehow
     self.setUpForObject(StateSpecimen())
     self.assertIn(
         transform_for_json(['register_block', 1, 'urlroot', ['shinysdr.i.network.test_export_ws.IFoo']]),
         self.getUpdates())
     self.assertRaises(Exception, lambda:  # TODO more specific error
         self.stream.dataReceived(json.dumps(['set', 1, 100.0, 1234])))
     self.assertEqual(self.getUpdates(), [])
 def test_value_patch(self):
     cell = StringSinkCell(encoding='us-ascii')
     yield _append_to_sink_cell(cell, b'ab')
     self.setUpForObject(Cells({'s': cell}))
     self.st.advance()
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             ['register_block', 1, 'urlroot', []],
             ['register_cell', 2, 'urlroot/s',
              cell.description(), 'ab'],
             ['value', 1, {
                 's': 2
             }],
             ['value', 0, 1],
         ]))
     yield _append_to_sink_cell(cell, b'cd')
     self.st.advance()
     self.assertEqual(self.getUpdates(),
                      transform_for_json([
                          ['value_append', 2, 'cd'],
                      ]))
Exemple #9
0
 def test_init_and_mutate(self):
     self.setUpForObject(StateSpecimen())
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['register_block', 1, 'urlroot', ['shinysdr.i.network.test_export_ws.IFoo']],
         ['register_cell', 2, 'urlroot/rw', self.object.state()['rw'].description(), 1.0],
         ['value', 1, {'rw': 2}],
         ['value', 0, 1],
     ]))
     self.assertEqual(self.getUpdates(), [])
     self.object.set_rw(2.0)
     self.assertEqual(self.getUpdates(), [
         ['value', 2, self.object.get_rw()],
     ])
Exemple #10
0
 def test_send_set_wrong_target(self):
     # Raised exception will be logged safely by the wrappper.
     # TODO: Instead of raising, report the error associated with the connection somehow
     self.setUpForObject(StateSpecimen())
     self.assertIn(
         transform_for_json([
             'register_block', 1, 'urlroot',
             ['shinysdr.test.i.network.test_export_ws.IFoo']
         ]), self.getUpdates())
     self.assertRaises(
         Exception,
         lambda:  # TODO more specific error
         self.stream.dataReceived(json.dumps(['set', 1, 100.0, 1234])))
     self.assertEqual(self.getUpdates(), [])
Exemple #11
0
 def test_stream_cell(self):
     self.setUpForObject(StreamCellSpecimen())
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             [u'register_block', 1, u'urlroot', []],
             [
                 u'register_cell', 2, u'urlroot/s',
                 self.object.state()['s'].description()
             ],
             [u'value', 1, {
                 u's': 2
             }],
             [u'value', 0, 1],
         ]))
     self.object.queue.insert_tail(gr.message().make_from_string(
         b'qu', 0, 1, len('qu')))
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             ['actually_binary', b'\x02\x00\x00\x00q'],
             ['actually_binary', b'\x02\x00\x00\x00u'],
         ]))
Exemple #12
0
 def test_send_set_normal(self):
     self.setUpForObject(StateSpecimen())
     self.assertIn(
         transform_for_json(['register_cell', 2, 'urlroot/rw', self.object.state()['rw'].description(), 1.0]),
         self.getUpdates())
     self.stream.dataReceived(json.dumps(['set', 2, 100.0, 1234]))
     self.assertEqual(self.getUpdates(), [
         ['value', 2, 100.0],
         ['done', 1234],
     ])
     self.stream.dataReceived(json.dumps(['set', 2, 100.0, 1234]))
     self.assertEqual(self.getUpdates(), [
         # don't see any value message
         ['done', 1234],
     ])
 def test_value_patch(self):
     queue = gr.msg_queue()
     queue.insert_tail(make_bytes_msg(b'ab'))
     cell = StringQueueCell(queue=queue, encoding='us-ascii')
     self.setUpForObject(Cells({'s': cell}))
     self.st.advance()
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             ['register_block', 1, 'urlroot', []],
             ['register_cell', 2, 'urlroot/s',
              cell.description(), ''],  # TODO should have initial value
             ['value', 1, {
                 's': 2
             }],
             ['value', 0, 1],
             ['value_append', 2, 'ab'],
         ]))
     queue.insert_tail(make_bytes_msg(b'cd'))
     self.st.advance()
     self.assertEqual(self.getUpdates(),
                      transform_for_json([
                          ['value_append', 2, 'cd'],
                      ]))
Exemple #14
0
 def test_send_set_normal(self):
     self.setUpForObject(StateSpecimen())
     self.assertIn(
         transform_for_json([
             'register_cell', 2, 'urlroot/rw',
             self.object.state()['rw'].description()
         ]), self.getUpdates())
     self.stream.dataReceived(json.dumps(['set', 2, 100.0, 1234]))
     self.assertEqual(self.getUpdates(), [
         ['value', 2, 100.0],
         ['done', 1234],
     ])
     self.stream.dataReceived(json.dumps(['set', 2, 100.0, 1234]))
     self.assertEqual(
         self.getUpdates(),
         [
             # don't see any value message
             ['done', 1234],
         ])
Exemple #15
0
 def test_collection_delete(self):
     d = CellDict({'a': ExportedState()}, dynamic=True)
     self.setUpForObject(CollectionState(d))
     
     self.assertEqual(self.getUpdates(), transform_for_json([
         ['register_block', 1, 'urlroot', []],
         ['register_cell', 2, 'urlroot/a', self.object.state()['a'].description(), None],
         ['register_block', 3, 'urlroot/a', []],
         ['value', 3, {}],
         ['value', 2, 3],
         ['value', 1, {'a': 2}],
         ['value', 0, 1],
     ]))
     self.assertEqual(self.getUpdates(), [])
     del d['a']
     self.assertEqual(self.getUpdates(), [
         ['value', 1, {}],
         ['delete', 2],
         ['delete', 3],
     ])
Exemple #16
0
 def test_two_references(self):
     """Two references are handled correctly, including not deleting until both are gone."""
     self.setUpForObject(DuplicateReferenceSpecimen())
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             [u'register_block', 1, u'urlroot', []],
             [
                 u'register_cell', 2, u'urlroot/foo',
                 self.object.state()['foo'].description()
             ],
             [
                 u'register_block', 3, u'urlroot/foo',
                 [u'shinysdr.values.INull']
             ],
             [u'value', 3, {}],
             [u'value', 2, 3],
             [
                 u'register_cell', 4, u'urlroot/bar',
                 self.object.state()['bar'].description()
             ],
             [u'value', 4, 3],
             [u'value', 1, {
                 u'bar': 4,
                 u'foo': 2
             }],
             [u'value', 0, 1],
         ]))
     replacement = NullExportedState()
     # becomes distinct
     self.object.bar = replacement
     self.object.state_changed()
     self.assertEqual(self.getUpdates(), [[
         u'register_block', 5, u'urlroot/bar', [u'shinysdr.values.INull']
     ], [u'value', 5, {}], [u'value', 4, 5]])
     # old value should be deleted
     self.object.foo = replacement
     self.object.state_changed()
     self.assertEqual(self.getUpdates(), [[u'value', 2, 5], [u'delete', 3]])
Exemple #17
0
 def test_init_and_mutate(self):
     self.setUpForObject(StateSpecimen())
     self.assertEqual(
         self.getUpdates(),
         transform_for_json([
             [
                 'register_block', 1, 'urlroot',
                 ['shinysdr.test.i.network.test_export_ws.IFoo']
             ],
             [
                 'register_cell', 2, 'urlroot/rw',
                 self.object.state()['rw'].description()
             ],
             ['value', 1, {
                 'rw': 2
             }],
             ['value', 0, 1],
         ]))
     self.assertEqual(self.getUpdates(), [])
     self.object.set_rw(2.0)
     self.assertEqual(self.getUpdates(), [
         ['value', 2, self.object.get_rw()],
     ])
Exemple #18
0
 def test_default(self):
     value = {'things': [1, '2', None, True, False]}
     self.assertEqual(transform_for_json(value), value)
Exemple #19
0
 def test_tuple(self):
     """Test that the namedtuple special case does not affect regular tuples, other than by turning them into lists."""
     self.assertEqual(transform_for_json((1, (2, 3))), [1, [2, 3]])
Exemple #20
0
 def test_namedtuple(self):
     self.assertEqual(
         transform_for_json([SomeNamedTuple([1], SomeNamedTuple(2, 3))]),
         [{'x': [1], 'y': {'x': 2, 'y': 3}}])