Exemplo n.º 1
0
    def test_load_arduino_cli_valid(self, mock_isfile, mock_file_dialog):
        """
        Tests that the set_compiler_path method edits the settings based on the
        output from the gui.browse_file_dialog() function only if it has not
        been cancelled.
        The return value is not tested as it is a direct call to the
        actions.get_compiler_path() function and will be tested individually.
        """
        self.delete_default_settings_file()
        settings = ServerCompilerSettings()
        new_compiler_dir = os.path.join(os.getcwd(), 'arduino_debug.exe')
        mock_file_dialog.return_value = new_compiler_dir
        # The settings.compiler_dir checks for file validity
        mock_isfile.return_value = True
        old_compiler_dir = settings.compiler_dir
        actions.set_compiler_path()
        self.assertNotEqual(old_compiler_dir, settings.compiler_dir)
        # Using in as each OSs will dealt with compiler path differently
        self.assertTrue(new_compiler_dir in settings.compiler_dir)

        # If the dialog is cancelled, the ServerCompilerSettings class should
        # not be invoked at all
        with patch(
                'ardublocklyserver.actions.ServerCompilerSettings.__new__') \
                as mock_settings:
            # Avoid call to ServerCompilerSettings() in get_compiler_path
            with patch('ardublocklyserver.actions.get_compiler_path') \
                    as mock_get_compiler_path:
                mock_file_dialog.return_value = ''  # Dialog cancel return value
                mock_get_compiler_path.return_vale = None  # Don't care
                old_compiler_dir = settings.compiler_dir
                actions.set_compiler_path()
                self.assertEqual(old_compiler_dir, settings.compiler_dir)
                self.assertFalse(mock_settings.called)
Exemplo n.º 2
0
    def test_load_arduino_cli_valid(self, mock_isfile, mock_file_dialog):
        """
        Tests that the set_compiler_path method edits the settings based on the
        output from the gui.browse_file_dialog() function only if it has not
        been cancelled.
        The return value is not tested as it is a direct call to the
        actions.get_compiler_path() function and will be tested individually.
        """
        self.delete_default_settings_file()
        settings = ServerCompilerSettings()
        new_compiler_dir = os.path.join(os.getcwd(), 'arduino_debug.exe')
        mock_file_dialog.return_value = new_compiler_dir
        # The settings.compiler_dir checks for file validity
        mock_isfile.return_value = True
        old_compiler_dir = settings.compiler_dir
        actions.set_compiler_path()
        self.assertNotEqual(old_compiler_dir, settings.compiler_dir)
        # Using in as each OSs will dealt with compiler path differently
        self.assertTrue(new_compiler_dir in settings.compiler_dir)

        # If the dialog is cancelled, the ServerCompilerSettings class should
        # not be invoked at all
        with mock.patch(
                'ardublocklyserver.actions.ServerCompilerSettings.__new__') \
                as mock_settings:
            # Avoid call to ServerCompilerSettings() in get_compiler_path
            with mock.patch('ardublocklyserver.actions.get_compiler_path') \
                    as mock_get_compiler_path:
                mock_file_dialog.return_value = ''  # Dialog cancel return value
                mock_get_compiler_path.return_vale = None  # Don't care
                old_compiler_dir = settings.compiler_dir
                actions.set_compiler_path()
                self.assertEqual(old_compiler_dir, settings.compiler_dir)
                self.assertFalse(mock_settings.called)
def handle_settings(parameters):

    def _get_value(parameters2):
        """ Searches for a 'value' parameter in the dictionary. """
        value2 = None
        for key2 in parameters2:
            if str(key2) == 'value':
                value2 = str(parameters2[key2])
        return value2

    message_back = None
    for key in parameters:
        # Compiler
        if str(key) == 'compiler':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_compiler_path()
            elif str(parameters[key]) == "['set']":
                message_back = actions.set_compiler_path()
        # Sketch
        elif str(key) == 'sketch':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_sketch_path()
            elif str(parameters[key]) == "['set']":
                message_back = actions.set_sketch_path()
        # Arduino Board
        elif str(key) == 'board':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_arduino_boards()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_arduino_board(value)
        # Serial port
        elif str(key) == 'serial':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_serial_ports()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_serial_port(value)
        # Launch Only Options
        elif str(key) == 'ide':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_load_ide_only()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_load_ide_only(value)
        # The Value parameter is only used in some cases
        elif str(key) == 'value':
            pass
        # Parameter not recognised
        else:
            print('The "' + str(key) + '" = ' + str(parameters[key]) +
                  ' parameter is not recognised!')
    return message_back
Exemplo n.º 4
0
def handle_settings(parameters):
    def _get_value(parameters2):
        """ Searches for a 'value' parameter in the dictionary. """
        value2 = None
        for key2 in parameters2:
            if str(key2) == 'value':
                value2 = str(parameters2[key2])
        return value2

    message_back = None
    for key in parameters:
        # Compiler
        if str(key) == 'compiler':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_compiler_path()
            elif str(parameters[key]) == "['set']":
                message_back = actions.set_compiler_path()
        # Sketch
        elif str(key) == 'sketch':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_sketch_path()
            elif str(parameters[key]) == "['set']":
                message_back = actions.set_sketch_path()
        # Arduino Board
        elif str(key) == 'board':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_arduino_boards()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_arduino_board(value)
        # Serial port
        elif str(key) == 'serial':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_serial_ports()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_serial_port(value)
        # Launch Only Options
        elif str(key) == 'ide':
            if str(parameters[key]) == "['get']":
                message_back = actions.get_load_ide_only()
            elif str(parameters[key]) == "['set']":
                value = _get_value(parameters)
                value = re.sub(r'^\[\'', '', value)
                value = re.sub(r'\'\]', '', value)
                message_back = actions.set_load_ide_only(value)
        # The Value parameter is only used in some cases
        elif str(key) == 'value':
            pass
        # Parameter not recognised
        else:
            print('The "' + str(key) + '" = ' + str(parameters[key]) +
                  ' parameter is not recognised!')
    return message_back
Exemplo n.º 5
0
    def test_set_compiler_path_valid(self, mock_isfile):
        """Test set_compiler_path function changes the compiler Setting.

        :param mock_isfile: Mock for os.path.isfile() inside accessor.
        :return: None.
        """
        old_compiler_dir = self.settings.compiler_dir
        new_compiler_dir = os.path.join(self.temp_folder, 'arduino_debug.exe')
        self.assertNotEqual(old_compiler_dir, new_compiler_dir)
        mock_isfile.return_value = True

        returned_path = actions.set_compiler_path(new_compiler_dir)

        self.assertEqual(returned_path, self.settings.compiler_dir)
        self.assertNotEqual(returned_path, old_compiler_dir)
        self.assertNotEqual(self.settings.compiler_dir, old_compiler_dir)
        # Using in as each OSs will dealt with compiler path differently
        self.assertTrue(new_compiler_dir in returned_path)
        self.assertTrue(new_compiler_dir in self.settings.compiler_dir)
Exemplo n.º 6
0
    def test_set_compiler_path_invalid(self, mock_isfile):
        """Test invalid file path send to set_compiler_path function.

        Tests that the set_compiler_path() function does not edit the settings
        based on a entered directory that is not valid.

        :param mock_isfile: Mock for os.path.isfile().
        :return: None.
        """
        old_compiler_dir = self.settings.compiler_dir
        new_compiler_dir = os.path.join(self.temp_folder, 'arduino_debug.exe')
        self.assertNotEqual(old_compiler_dir, new_compiler_dir)
        mock_isfile.return_value = False

        returned_path = actions.set_compiler_path(new_compiler_dir)

        self.assertEqual(returned_path, old_compiler_dir)
        self.assertEqual(returned_path, self.settings.compiler_dir)
        self.assertNotEqual(returned_path, new_compiler_dir)
        self.assertEqual(self.settings.compiler_dir, old_compiler_dir)
        self.assertNotEqual(self.settings.compiler_dir, new_compiler_dir)
Exemplo n.º 7
0
def handler_settings_update_individual(name):
    """Handle the POST setting requests.

    Error codes:
    63 - Unexpected setting type to update.
    64 - Unable to parse sent JSON.
    65 - JSON received does not have 'new_value' key.
    66 - Invalid value.
    67 - New value could not be set.

    :param name: Setting value to retrieve.
    :return: JSON string with the formed response.
    """
    response_dict = {'response_type': 'settings',
                     'response_state': 'full_response',
                     'settings_type': name}
    try:
        new_value = request.json['new_value']
    except (TypeError, ValueError):
        response_dict.update({
            'success': False,
            'errors': [{
                'id': 64,
                'description': 'Unable to parse sent JSON.'
            }]
        })
    except KeyError:
        response_dict.update({
            'success': False,
            'errors': [{
                'id': 65,
                'description': 'JSON received does not have \'new_value\' key.'
            }]
        })
    else:
        if not new_value:
            response_dict.update({
                'success': False,
                'errors': [{
                    'id': 66,
                    'description': 'Invalid value.'
                }]
            })
        else:
            options = None
            set_value = None
            if name == 'compiler':
                set_value = actions.set_compiler_path(new_value)
            elif name == 'sketch':
                set_value = actions.set_sketch_path(new_value)
            elif name == 'board':
                set_value = actions.set_arduino_board(new_value)
                options = [{'value': board, 'display_text': board}
                           for board in actions.get_arduino_boards()]
            elif name == 'serial':
                set_value = actions.set_serial_port(new_value)
                options = [{'value': k, 'display_text': v}
                           for k, v in iteritems(actions.get_serial_ports())]
            elif name == 'ide':
                set_value = actions.set_load_ide_only(new_value)
                options = [{'value': k, 'display_text': v} for k, v in
                           iteritems(actions.get_load_ide_options())]
            else:
                response_dict.update({'success': False,
                                      'settings_type': 'invalid'})
                response_dict.setdefault('errors', []).append({
                    'id': 63,
                    'description': 'Unexpected setting type to update.'
                })
            # Check if sent value was set, might have been expanded in Settings
            if set_value in new_value:
                response_dict.update({
                    'success': True,
                    'selected': set_value
                })
                if options:
                    response_dict.update({'options': options})
            else:
                response_dict.update({'success': False})
                response_dict.setdefault('errors', []).append({
                    'id': 67,
                    'description': 'New value could not be set.'
                })
    set_header_no_cache()
    return response_dict