Пример #1
0
    def test_encode_command_string(self):
        # test strings
        command = 'play'
        kwargs = dict(some_value='7', another_value='2')
        expected_strings = ('play?some_value=7&another_value=2',
                            'play?another_value=2&some_value=7')

        actual_string = encode_command_string(command, **kwargs)

        self.assertIn(actual_string, expected_strings)

        # test ints, floats, bools, and none
        command = 'play'
        kwargs = dict(some_int=7,
                      some_float=2.0,
                      some_none=None,
                      some_true=True,
                      some_false=False)
        expected_snippets = ('play?', 'some_int=int:7', 'some_float=float:2.0',
                             'some_none=NoneType:', 'some_true=bool:True',
                             'some_false=bool:False')

        actual_string = encode_command_string(command, **kwargs)

        for snippet in expected_snippets:
            self.assertIn(snippet, actual_string)
Пример #2
0
    def testConnect(self):
        # check that server was opened
        self.assertTrue(self.mock_server.is_bound)

        # add client
        client = MockQueueSocket()
        self.mock_server.add_client(client)
        self.advance_time_and_run()

        # check hello
        self.assertEqual(1, len(client.send_queue))
        cmd, kwargs = decode_command_string(
            client.send_queue.pop()[0:-1].decode())
        self.assertEqual("hello", cmd)

        # test trigger
        self.mock_event("test_event")
        client.recv_queue.append(
            (encode_command_string("trigger", name="test_event") +
             '\n').encode())
        self.advance_time_and_run()
        self.assertEqual(1, self._events['test_event'])

        # register for event/trigger
        client.recv_queue.append(
            (encode_command_string("register_trigger", event="test_trigger") +
             '\n').encode())
        self.advance_time_and_run()
        self.assertEqual(0, len(client.send_queue))

        # post trigger event
        self.post_event("test_trigger")
        self.advance_time_and_run()
        self.assertEqual(1, len(client.send_queue))
        cmd, kwargs = decode_command_string(
            client.send_queue.pop()[0:-1].decode())
        self.assertEqual("trigger", cmd)
        self.assertEqual("test_trigger", kwargs['name'])

        # send goodbye. machine should continue to run.
        client.close = MagicMock()
        client.recv_queue.append(
            (encode_command_string("goodbye") + '\n').encode())
        self.advance_time_and_run()

        client.close.assert_called_with()

        self.assertFalse(self.machine._done)
Пример #3
0
 def test_roundtrip(self):
     test_kwargs = {
         "registered_handlers": [{
             "calling_context":
             "logicblock_baby_bonus_hit{count%10==5}"
         }]
     }
     encoded_cmd = encode_command_string("test", **test_kwargs)
     decoded_cmd, decoded_cmd_kwargs = decode_command_string(encoded_cmd)
     self.assertEqual(decoded_cmd_kwargs, test_kwargs)
Пример #4
0
    def test_json_encoding_decoding_with_hashtags(self):
        # see: https://github.com/missionpinball/mpf/issues/1495
        command = 'play'
        kwargs = dict()
        kwargs['dict1'] = dict(key1='value1 #', key2='value2 #')

        encoded_string = encode_command_string(command, **kwargs)
        decoded_command, decoded_dict = decode_command_string(encoded_string)

        self.assertEqual('play', decoded_command)
        self.assertIn('dict1', decoded_dict)
        self.assertEqual(decoded_dict['dict1']['key1'], 'value1 #')
        self.assertEqual(decoded_dict['dict1']['key2'], 'value2 #')
Пример #5
0
    def test_json_encoding_decoding(self):
        # test with dicts
        command = 'play'
        kwargs = dict()
        kwargs['dict1'] = dict(key1='value1', key2='value2')
        kwargs['dict2'] = dict(key3='value3', key4='value4')

        encoded_string = encode_command_string(command, **kwargs)
        decoded_command, decoded_dict = decode_command_string(encoded_string)

        self.assertEqual('play', decoded_command)
        self.assertIn('dict1', decoded_dict)
        self.assertIn('dict2', decoded_dict)
        self.assertEqual(decoded_dict['dict1']['key1'], 'value1')
        self.assertEqual(decoded_dict['dict1']['key2'], 'value2')
        self.assertEqual(decoded_dict['dict2']['key3'], 'value3')
        self.assertEqual(decoded_dict['dict2']['key4'], 'value4')

        # test with list
        command = 'play'
        kwargs = dict()
        kwargs['dict1'] = dict(key1='value1', key2='value2')
        kwargs['dict2'] = list()
        kwargs['dict2'].append(dict(key3='value3', key4='value4'))
        kwargs['dict2'].append(dict(key3='value5', key4='value6'))

        encoded_string = encode_command_string(command, **kwargs)
        decoded_command, decoded_dict = decode_command_string(encoded_string)

        self.assertEqual('play', decoded_command)
        self.assertIn('dict1', decoded_dict)
        self.assertIn('dict2', decoded_dict)
        self.assertEqual(decoded_dict['dict1']['key1'], 'value1')
        self.assertEqual(decoded_dict['dict1']['key2'], 'value2')
        self.assertEqual(decoded_dict['dict2'][0],
                         dict(key3='value3', key4='value4'))
        self.assertEqual(decoded_dict['dict2'][1],
                         dict(key3='value5', key4='value6'))
Пример #6
0
    def test_from_show_via_bcp(self):
        from mpf.core.bcp.bcp_socket_client import encode_command_string

        show_slide_section = dict()
        show_slide_section['widgets'] = list()

        show_slide_section['widgets'].append(dict(
            type='text', text='TEST FROM SHOW'))

        player = McSlidePlayer(self.mc)
        show_slide_section = player._validate_config_item('slide1', show_slide_section)

        bcp_string = encode_command_string('trigger', name='slides_play', context='test_context', priority=1,
                                           settings=show_slide_section)

        self.mc.bcp_processor.receive_bcp_message(bcp_string)
        self.advance_time()
Пример #7
0
    def send(self, bcp_command, callback=None, rawbytes=None, **kwargs):
        """Sends a BCP command to the connected pinball controller.

        Note that if the BCP server is not running, this method will just throw
        the BCP away. (It will still call the callback in that case.

        Args:
            bcp_command: String of the BCP command name.
            callback: Optional callback method that will be called when the
                command is sent.
            **kwargs: Optional additional kwargs will be added to the BCP
                command string.

        """
        if self.enabled:
            if not self.mc.bcp_client_connected:
                raise AssertionError("Not connected to MPF.")

            self.sending_queue.put(
                (bcp.encode_command_string(bcp_command, **kwargs), rawbytes))

        if callback:
            callback()
Пример #8
0
 def _encode_and_send(self, cmd, **kwargs):
     self.client.recv_queue.append(
         (encode_command_string("vpcom_bridge", subcommand=cmd, **kwargs) +
          '\n').encode())
Пример #9
0
 def _encode_and_send(self, client, cmd, **kwargs):
     client.recv_queue.append((encode_command_string(cmd, **kwargs) + '\n').encode())
Пример #10
0
 def send(self, bcp_command, **kwargs):
     self.sending_queue.put(bcp.encode_command_string(
         bcp_command, **kwargs))