Пример #1
0
 def state_def(self):
     for d in super(PSK31Demodulator, self).state_def():
         yield d
     # TODO make this possible to be decorator style
     yield 'text', StringQueueCell(
         queue=self.__char_queue,
         encoding='us-ascii')
Пример #2
0
 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'],
                      ]))
Пример #3
0
 def setUpForBulkData(self):
     self.cell = ElementQueueCell(
         queue=self.queue,
         info_getter=self.info_getter,
         type=BulkDataT(array_format='f', info_format='d'),
         interest_tracker=LoopbackInterestTracker())
Пример #4
0
 def setUpForUnicodeString(self):
     self.cell = StringQueueCell(queue=self.queue,
                                 encoding='utf-8',
                                 interest_tracker=LoopbackInterestTracker())
Пример #5
0
class TestGRMsgQueueCell(unittest.TestCase):
    cell = None  # for lint

    def setUp(self):
        self.info_value = 1000

        def info_getter():
            self.info_value += 1
            return (self.info_value, )

        self.info_getter = info_getter
        self.queue = gr.msg_queue()

    def setUpForBulkData(self):
        self.cell = ElementQueueCell(
            queue=self.queue,
            info_getter=self.info_getter,
            type=BulkDataT(array_format='f', info_format='d'),
            interest_tracker=LoopbackInterestTracker())

    def setUpForUnicodeString(self):
        self.cell = StringQueueCell(queue=self.queue,
                                    encoding='utf-8',
                                    interest_tracker=LoopbackInterestTracker())

    def test_element_get_before_and_after_poll(self):
        self.setUpForBulkData()
        self.queue.insert_tail(make_bytes_msg(b'ab'))
        gotten = self.cell.get()
        self.assertEqual(gotten, [])
        st = CellSubscriptionTester(self.cell, delta=True)
        st.advance()
        self.assertEqual(self.cell.get(), [
            BulkDataElement(data=b'a', info=(1001, )),
            BulkDataElement(data=b'b', info=(1001, ))
        ])
        self.assertEqual(gotten, [])  # not mutating list

    def test_element_delta_subscriber(self):
        self.setUpForBulkData()
        st = CellSubscriptionTester(self.cell, delta=True)
        self.queue.insert_tail(make_bytes_msg(b'ab'))
        st.expect_now([
            BulkDataElement(data=b'a', info=(1001, )),
            BulkDataElement(data=b'b', info=(1001, ))
        ],
                      kind='append')
        st.unsubscribe()
        self.queue.insert_tail(make_bytes_msg(b'ignored'))
        st.advance()

    def test_element_plain_subscriber(self):
        self.setUpForBulkData()
        st = CellSubscriptionTester(self.cell, delta=False)
        self.queue.insert_tail(make_bytes_msg(b'ab'))
        st.expect_now([
            BulkDataElement(data=b'a', info=(1001, )),
            BulkDataElement(data=b'b', info=(1001, ))
        ],
                      kind='value')
        st.unsubscribe()
        self.queue.insert_tail(make_bytes_msg(b'ignored'))
        st.advance()

    def test_string_get(self):
        self.setUpForUnicodeString()
        self.queue.insert_tail(make_bytes_msg('abç'.encode('utf-8')))
        gotten = self.cell.get()
        self.assertTrue(isinstance(gotten, unicode))
        self.assertEqual(gotten, u'')
        st = CellSubscriptionTester(self.cell, delta=True)
        st.advance()
        gotten = self.cell.get()
        self.assertTrue(isinstance(gotten, unicode))
        self.assertEqual(gotten, 'abç')

        # now append some more to test the buffer
        self.queue.insert_tail(make_bytes_msg('deƒ'.encode('utf-8')))
        st.advance()
        self.assertEqual(self.cell.get(), 'abçdeƒ')

    def test_string_coding_error(self):
        self.setUpForUnicodeString()
        self.queue.insert_tail(make_bytes_msg(b'ab\xFF'))
        st = CellSubscriptionTester(self.cell, delta=True)
        st.expect_now('ab\uFFFD', kind='append')

    def test_string_delta_subscriber(self):
        self.setUpForUnicodeString()
        st = CellSubscriptionTester(self.cell, delta=True)
        self.queue.insert_tail(make_bytes_msg('abç'.encode('utf-8')))
        st.expect_now('abç', kind='append')
        st.unsubscribe()
        self.queue.insert_tail(make_bytes_msg(b'ignored'))
        st.advance()

    def test_string_plain_subscriber(self):
        self.setUpForUnicodeString()
        st = CellSubscriptionTester(self.cell, delta=False)
        self.queue.insert_tail(make_bytes_msg('abç'.encode('utf-8')))
        st.expect_now('abç')
        self.queue.insert_tail(make_bytes_msg('deƒ'.encode('utf-8')))

        # TODO: This is not the correct result; it should match get().
        # Poller currently does not deal with attaching simple subscribers correctly
        st.expect_now('deƒ')