コード例 #1
0
 def validate(self):
     as_token = self.get_token(Token.AS)
     if as_token:
         if as_token is not self.tokens[-2]:
             self.errors += ("EXCEPT's AS marker must be second to last.", )
         var = self.tokens[-1].value
         if not is_scalar_assign(var):
             self.errors += (f"EXCEPT's AS variable '{var}' is invalid.", )
コード例 #2
0
ファイル: statements.py プロジェクト: xylix/robotframework
 def validate(self, context):
     as_token = self.get_token(Token.AS)
     if as_token:
         variables = self.get_tokens(Token.VARIABLE)
         if not variables:
             self.errors += ("EXCEPT's AS requires variable.",)
         elif len(variables) > 1:
             self.errors += ("EXCEPT's AS accepts only one variable.",)
         elif not is_scalar_assign(variables[0].value):
             self.errors += (f"EXCEPT's AS variable '{variables[0].value}' is invalid.",)
コード例 #3
0
 def validate(self):
     if not self.variables:
         self._add_error('no loop variables')
     if not self.flavor:
         self._add_error("no 'IN' or other valid separator")
     else:
         for var in self.variables:
             if not is_scalar_assign(var):
                 self._add_error("invalid loop variable '%s'" % var)
         if not self.values:
             self._add_error('no loop values')
コード例 #4
0
 def _validate_arg(self, arg):
     arg, default = split_from_equals(arg)
     if not (is_assign(arg) or arg == '@{}'):
         self._report_error("Invalid argument syntax '%s'." % arg)
     if default is None:
         return arg
     if not is_scalar_assign(arg):
         typ = 'list' if arg[0] == '@' else 'dictionary'
         self._report_error("Only normal arguments accept default values, "
                            "%s arguments like '%s' do not." % (typ, arg))
     return arg, default
コード例 #5
0
 def _validate(self, data):
     if not data.ended:
         raise DataError("FOR loop has no closing 'END'.")
     if not data.variables:
         raise DataError('FOR loop has no loop variables.')
     for var in data.variables:
         if not is_scalar_assign(var):
             raise DataError("Invalid FOR loop variable '%s'." % var)
     if not data.values:
         raise DataError('FOR loop has no loop values.')
     if not data.keywords:
         raise DataError('FOR loop contains no keywords.')
コード例 #6
0
ファイル: test_isvar.py プロジェクト: zoeltea/robotframework
 def test_is_scalar_assign(self):
     for ok in SCALARS:
         assert is_scalar_assign(ok)
         assert is_scalar_assign(ok + '=', allow_assign_mark=True)
         assert is_scalar_assign(ok + ' =', allow_assign_mark=True)
         assert not is_scalar_assign(ok + '[item]')
         assert not is_scalar_assign(' ' + ok)
     for nok in NOK_ASSIGNS + LISTS + DICTS:
         assert not is_scalar_assign(nok)
コード例 #7
0
 def test_is_scalar_assign(self):
     for ok in SCALARS:
         assert is_scalar_assign(ok)
         assert search_variable(ok).is_scalar_assign()
         assert is_scalar_assign(ok + '=', allow_assign_mark=True)
         assert is_scalar_assign(ok + ' =', allow_assign_mark=True)
         assert not is_scalar_assign(ok + '[item]')
         assert not is_scalar_assign(' ' + ok)
     for nok in NOK_ASSIGNS + LISTS + DICTS:
         assert not is_scalar_assign(nok)
         assert not search_variable(nok, ignore_errors=True).is_scalar_assign()
コード例 #8
0
 def _validate(self):
     errors = []
     if not self.variables:
         errors.append('No loop variables.')
     if not self.flavor:
         errors.append("No 'IN' or other valid separator.")
     else:
         for var in self.variables:
             if not is_scalar_assign(var):
                 errors.append("Invalid loop variable '%s'." % var)
         if not self.values:
             errors.append('No loop values.')
     if not self.body:
         errors.append('Empty body.')
     if not self.end:
         errors.append("No closing 'END'.")
     return errors
コード例 #9
0
 def _validate(self, data):
     # TODO: Remove header and end deprecations in RF 3.3!
     if data._header != 'FOR':
         self._deprecated(
             "For loop header '%s' is deprecated. "
             "Use 'FOR' instead." % data._header, data)
     if data._end is None:
         raise DataError("For loop has no closing 'END'.")
     if data._end != 'END':
         self._deprecated(
             "Marking for loop body with '\\' is deprecated. "
             "Remove markers and use 'END' instead.", data)
     if not data.variables:
         raise DataError('FOR loop has no loop variables.')
     for var in data.variables:
         if not is_scalar_assign(var):
             raise DataError("Invalid FOR loop variable '%s'." % var)
     if not data.values:
         raise DataError('FOR loop has no loop values.')
     if not data.keywords:
         raise DataError('FOR loop contains no keywords.')
コード例 #10
0
    def visit_ForHeader(self, node):
        import robot.parsing.lexer.tokens as tokens
        if not node.variables:
            self.append_error(node, 'FOR loop has no loop variables.')
        else:
            for var in [
                    t for t in node.tokens if t.type in tokens.Token.VARIABLE
            ]:
                if not is_scalar_assign(var.value):
                    self.append_error(
                        var,
                        f"FOR loop has invalid loop variable '{var.value}'.")

        if not node.flavor:
            self.append_error(
                node, "FOR loop has no 'IN' or other valid separator.")
        else:

            if not node.values:
                self.append_error(node, 'FOR loop has no loop values.')

        self.generic_visit(node)
コード例 #11
0
 def _format_arg(self, arg):
     if not is_scalar_assign(arg):
         self._raise_invalid_spec("Invalid argument syntax '%s'." % arg)
     return arg[2:-1]