Example #1
0
def init_global_variables(settings):
    GLOBAL_VARIABLES.clear()
    _set_cli_vars(settings)
    for name, value in [ ('${TEMPDIR}', utils.abspath(tempfile.gettempdir())),
                         ('${EXECDIR}', utils.abspath('.')),
                         ('${/}', os.sep),
                         ('${:}', os.pathsep),
                         ('${\\n}', os.linesep),
                         ('${SPACE}', ' '),
                         ('${EMPTY}', ''),
                         ('@{EMPTY}', ()),
                         ('${True}', True),
                         ('${False}', False),
                         ('${None}', None),
                         ('${null}', None),
                         ('${OUTPUT_DIR}', settings['OutputDir']),
                         ('${OUTPUT_FILE}', settings['Output'] or 'NONE'),
                         ('${REPORT_FILE}', settings['Report'] or 'NONE'),
                         ('${LOG_FILE}', settings['Log'] or 'NONE'),
                         ('${LOG_LEVEL}', settings['LogLevel']),
                         ('${DEBUG_FILE}', settings['DebugFile'] or 'NONE'),
                         ('${PREV_TEST_NAME}', ''),
                         ('${PREV_TEST_STATUS}', ''),
                         ('${PREV_TEST_MESSAGE}', '') ]:
        GLOBAL_VARIABLES[name] = value
 def test_unc_path_when_chdir_is_root(self):
     orig = abspath(".")
     os.chdir("\\")
     try:
         assert_equal(abspath(self.unc_path), self.unc_exp)
     finally:
         os.chdir(orig)
 def test_abspath(self):
     for inp, exp in self._get_inputs():
         exp = os.path.abspath(exp)
         path = abspath(inp)
         assert_equal(path, exp, inp)
         assert_true(isinstance(path, unicode), inp)
         exp = exp.lower() if CASE_INSENSITIVE_FILESYSTEM else exp
         path = abspath(inp, case_normalize=True)
         assert_equal(path, exp, inp)
         assert_true(isinstance(path, unicode), inp)
 def test_abspath_when_cwd_is_non_ascii(self):
     orig = abspath(".")
     nonasc = u"\xe4"
     os.mkdir(nonasc)
     os.chdir(nonasc)
     try:
         assert_equal(abspath("."), orig + os.sep + nonasc)
     finally:
         os.chdir("..")
         os.rmdir(nonasc)
 def test_abspath_when_cwd_is_non_ascii(self):
     orig = abspath('.')
     nonasc = u'\xe4'
     os.mkdir(nonasc)
     os.chdir(nonasc)
     try:
         assert_equal(abspath('.'), orig + os.sep + nonasc)
     finally:
         os.chdir('..')
         os.rmdir(nonasc)
Example #6
0
 def _screenshot_to_file(self, path):
     path = utils.abspath(self._norm_path(path))
     self._validate_screenshot_path(path)
     print '*DEBUG* Using %s modules for taking screenshot.' \
         % self._screenshot_taker.module
     self._screenshot_taker(path)
     return path
 def _import_and_verify(self, path, attr=42, directory=TESTDIR,
                        name=None, remove=None):
     module = self._import(path, name, remove)
     assert_equals(module.attr, attr)
     assert_equals(module.func(), attr)
     if hasattr(module, '__file__'):
         assert_equals(dirname(abspath(module.__file__)), directory)
Example #8
0
 def _parse(self, path):
     try:
         return TestData(source=abspath(path),
                         include_suites=self.include_suites,
                         warn_on_skipped=self.warn_on_skipped)
     except DataError as err:
         raise DataError("Parsing '%s' failed: %s" % (path, unicode(err)))
Example #9
0
 def _process_value(self, name, value, log):
     if name == 'LogLevel':
         return self._process_log_level(value)
     if value == self._get_default_value(name):
         return value
     if name in ['Name', 'Doc', 'LogTitle', 'ReportTitle']:
         if name == 'Doc': value = self._escape(value)
         return value.replace('_', ' ')
     if name in ['Metadata', 'TagDoc']:
         if name == 'Metadata': value = [self._escape(v) for v in value]
         return [self._process_metadata_or_tagdoc(v) for v in value]
     if name in ['Include', 'Exclude']:
         return [v.replace('AND', '&').replace('_', ' ') for v in value]
     if name in self._output_opts and utils.eq(value, 'NONE'):
         return 'NONE'
     if name == 'OutputDir':
         return utils.abspath(value)
     if name in ['SuiteStatLevel', 'MonitorWidth']:
         return self._convert_to_positive_integer_or_default(name, value)
     if name in ['Listeners', 'VariableFiles']:
         return [self._split_args_from_name_or_path(item) for item in value]
     if name == 'ReportBackground':
         return self._process_report_background(value)
     if name == 'TagStatCombine':
         return [self._process_tag_stat_combine(v) for v in value]
     if name == 'TagStatLink':
         return [v for v in [self._process_tag_stat_link(v) for v in value] if v]
     if name == 'RemoveKeywords':
         return [v.upper() for v in value]
     return value
Example #10
0
 def _parse(self, path):
     try:
         return TestData(source=abspath(path),
                         include_suites=self.include_suites,
                         warn_on_skipped=self.warn_on_skipped,
                         extensions=self.extensions)
     except DataError as err:
         raise DataError("Parsing '%s' failed: %s" % (path, err.message))
 def test_non_existing(self):
     path = 'non-existing.py'
     assert_raises_with_msg(DataError,
         "Importing '%s' failed: File or directory does not exist." % path,
         Importer().import_class_or_module_by_path, path)
     path = abspath(path)
     assert_raises_with_msg(DataError,
         "Importing test file '%s' failed: File or directory does not exist." % path,
         Importer('test file').import_class_or_module_by_path, path)
Example #12
0
 def __init__(self, name, source=None, parent=None):
     _TestAndSuiteHelper.__init__(self, name, parent)
     self.source = utils.abspath(source) if source else None
     self._id = None
     self.metadata = utils.NormalizedDict()
     self.suites = []
     self.tests = []
     self.critical = _Critical()
     self.critical_stats = Stat()
     self.all_stats = Stat()
     if parent:
         parent.suites.append(self)
Example #13
0
 def _set_built_in_variables(self, settings):
     for name, value in [('${TEMPDIR}', abspath(tempfile.gettempdir())),
                         ('${EXECDIR}', abspath('.')),
                         ('${/}', os.sep),
                         ('${:}', os.pathsep),
                         ('${\\n}', os.linesep),
                         ('${SPACE}', ' '),
                         ('${True}', True),
                         ('${False}', False),
                         ('${None}', None),
                         ('${null}', None),
                         ('${OUTPUT_DIR}', settings.output_directory),
                         ('${OUTPUT_FILE}', settings.output or 'NONE'),
                         ('${REPORT_FILE}', settings.report or 'NONE'),
                         ('${LOG_FILE}', settings.log or 'NONE'),
                         ('${DEBUG_FILE}', settings.debug_file or 'NONE'),
                         ('${LOG_LEVEL}', settings.log_level),
                         ('${PREV_TEST_NAME}', ''),
                         ('${PREV_TEST_STATUS}', ''),
                         ('${PREV_TEST_MESSAGE}', '')]:
         self[name] = value
Example #14
0
    def _get_output_file(self, type_):
        """Returns path of the requested output file and creates needed dirs.

        `type_` can be 'Output', 'Log', 'Report', 'DebugFile' or 'XUnitFile'.
        """
        name = self._opts[type_]
        if self._outputfile_disabled(type_, name):
            return 'NONE'
        name = self._process_output_name(name, type_)
        path = utils.abspath(os.path.join(self['OutputDir'], name))
        self._create_output_dir(os.path.dirname(path), type_)
        return path
Example #15
0
File: model.py Project: nbbull/RIDE
def TestSuite(datasources, settings):
    """Creates a runnable test suite from given datasources and settings.

    :param datasources: List of paths to read data from.
    :param settings: Execution configuration.
    :type settings: :class:`~robot.conf.settings.RobotSettings`
    :returns: :class:`RunnableTestSuite`
    """
    datasources = [utils.abspath(path) for path in datasources]
    suite = _get_suite(datasources, settings["SuiteNames"], settings["WarnOnSkipped"])
    suite.set_options(settings)
    _check_suite_contains_tests(suite, settings["RunEmptySuite"])
    return suite
Example #16
0
 def _process_value(self, name, value):
     if name == 'ReRunFailed':
         return gather_failed_tests(value)
     if name == 'DeprecatedRunFailed':
         if value.upper() != 'NONE':
             LOGGER.warn('Option --runfailed is deprecated and will be '
                         'removed in the future. Use --rerunfailed instead.')
         return gather_failed_tests(value)
     if name == 'DeprecatedMerge' and value is True:
         LOGGER.warn('Option --rerunmerge is deprecated and will be '
                     'removed in the future. Use --merge instead.')
     if name == 'LogLevel':
         return self._process_log_level(value)
     if value == self._get_default_value(name):
         return value
     if name in ['Name', 'Doc', 'LogTitle', 'ReportTitle']:
         if name == 'Doc':
             value = self._escape_as_data(value)
         return value.replace('_', ' ')
     if name in ['Metadata', 'TagDoc']:
         if name == 'Metadata':
             value = [self._escape_as_data(v) for v in value]
         return [self._process_metadata_or_tagdoc(v) for v in value]
     if name in ['Include', 'Exclude']:
         return [self._format_tag_patterns(v) for v in value]
     if name in self._output_opts and (not value or value.upper() == 'NONE'):
         return None
     if name == 'OutputDir':
         return utils.abspath(value)
     if name in ['MonitorWidth', 'MonitorColors', 'MonitorMarkers']:
         option = '--' + name.lower()
         LOGGER.warn("Option '%s' is deprecated. Use '%s' instead."
                     % (option, option.replace('monitor', 'console')))
     if name in ['SuiteStatLevel', 'MonitorWidth', 'ConsoleWidth']:
         return self._convert_to_positive_integer_or_default(name, value)
     if name == 'VariableFiles':
         return [split_args_from_name_or_path(item) for item in value]
     if name == 'ReportBackground':
         return self._process_report_background(value)
     if name == 'TagStatCombine':
         return [self._process_tag_stat_combine(v) for v in value]
     if name == 'TagStatLink':
         return [v for v in [self._process_tag_stat_link(v) for v in value] if v]
     if name == 'Randomize':
         return self._process_randomize_value(value)
     if name == 'RemoveKeywords':
         self._validate_remove_keywords(value)
     if name == 'FlattenKeywords':
         self._validate_flatten_keywords(value)
     return value
Example #17
0
def init_global_variables(settings):
    GLOBAL_VARIABLES.clear()
    _set_cli_vars(settings)
    for name, value in [
        ("${TEMPDIR}", utils.abspath(tempfile.gettempdir())),
        ("${EXECDIR}", utils.abspath(".")),
        ("${/}", os.sep),
        ("${:}", os.pathsep),
        ("${SPACE}", " "),
        ("${EMPTY}", ""),
        ("${True}", True),
        ("${False}", False),
        ("${None}", None),
        ("${null}", None),
        ("${OUTPUT_DIR}", settings["OutputDir"]),
        ("${OUTPUT_FILE}", settings["Output"]),
        ("${REPORT_FILE}", settings["Report"]),
        ("${LOG_FILE}", settings["Log"]),
        ("${DEBUG_FILE}", settings["DebugFile"]),
        ("${PREV_TEST_NAME}", ""),
        ("${PREV_TEST_STATUS}", ""),
        ("${PREV_TEST_MESSAGE}", ""),
    ]:
        GLOBAL_VARIABLES[name] = value
Example #18
0
    def _get_output_file(self, option):
        """Returns path of the requested output file and creates needed dirs.

        `option` can be 'Output', 'Log', 'Report', 'XUnit' or 'DebugFile'.
        """
        name = self._opts[option]
        if not name:
            return None
        if option == 'Log' and self._output_disabled():
            self['Log'] = None
            LOGGER.error('Log file is not created if output.xml is disabled.')
            return None
        name = self._process_output_name(option, name)
        path = utils.abspath(os.path.join(self['OutputDir'], name))
        self._create_output_dir(os.path.dirname(path), option)
        return path
Example #19
0
 def _process_value(self, name, value):
     if name in ['ReRunFailed', 'DeprecatedRunFailed']:
         return gather_failed_tests(value)
     if name == 'LogLevel':
         return self._process_log_level(value)
     if value == self._get_default_value(name):
         return value
     if name in ['Name', 'Doc', 'LogTitle', 'ReportTitle']:
         if name == 'Doc':
             value = self._escape_as_data(value)
         return value.replace('_', ' ')
     if name in ['Metadata', 'TagDoc']:
         if name == 'Metadata':
             value = [self._escape_as_data(v) for v in value]
         return [self._process_metadata_or_tagdoc(v) for v in value]
     if name in ['Include', 'Exclude']:
         return [self._format_tag_patterns(v) for v in value]
     if name in self._output_opts and (not value or value.upper() == 'NONE'):
         return None
     if name == 'DeprecatedXUnit':
         LOGGER.warn('Option --xunitfile is deprecated. Use --xunit instead.')
         return self._process_value('XUnit', value)
     if name == 'OutputDir':
         return utils.abspath(value)
     if name in ['SuiteStatLevel', 'MonitorWidth']:
         return self._convert_to_positive_integer_or_default(name, value)
     if name in ['Listeners', 'VariableFiles']:
         return [self._split_args_from_name_or_path(item) for item in value]
     if name == 'ReportBackground':
         return self._process_report_background(value)
     if name == 'TagStatCombine':
         return [self._process_tag_stat_combine(v) for v in value]
     if name == 'TagStatLink':
         return [v for v in [self._process_tag_stat_link(v) for v in value] if v]
     if name == 'Randomize':
         return self._process_randomize_value(value)
     if name == 'RunMode':
         LOGGER.warn('Option --runmode is deprecated in Robot Framework 2.8 '
                     'and will be removed in the future.')
         return [self._process_runmode_value(v) for v in value]
     if name == 'RemoveKeywords':
         self._validate_remove_keywords(value)
     if name == 'FlattenKeywords':
         self._validate_flatten_keywords(value)
     return value
Example #20
0
 def __init__(self, path=None, template=None, functions=None):
     if path is None and template is None:
         raise FrameworkError("Either 'path' or 'template' must be given")
     if template is None:
         tfile = open(path)
         template = tfile.read()
         tfile.close()
         self.parent_dir = os.path.dirname(utils.abspath(path))
     else:
         self.parent_dir = None
     self._template = template
     self._functions = functions or utils.NormalizedDict()
     # True means handlers for more than single line
     self._handlers = { 'INCLUDE': (self._handle_include, False),
                        'IMPORT': (self._handle_import, False),
                        'CALL': (self._handle_call, False),
                        'IF': (self._handle_if, True),
                        'FOR': (self._handle_for, True),
                        'FUNCTION': (self._handle_function, True) }
Example #21
0
def TestSuite(datasources, settings):
    """Creates a runnable test suite from given data sources and settings.

    This is a factory method that returns either :class:`RunnableTestSuite`
    or :class:`RunnableMultiTestSuite` depending are one or more data sources
    given. This method, and especially the returned suite, is likely to change
    heavily in version 2.8.

    :param datasources: List of paths to read data from. Starting from 2.7.2,
                        a single datasource can also be given as a string.
    :param settings: Execution configuration.
    :type settings: :class:`~robot.conf.settings.RobotSettings`
    :returns: :class:`RunnableTestSuite`
    """
    if isinstance(datasources, basestring):
        datasources = [datasources]
    datasources = [utils.abspath(path) for path in datasources]
    suite = _get_suite(datasources, settings['SuiteNames'], settings['WarnOnSkipped'])
    suite.set_options(settings)
    _check_suite_contains_tests(suite, settings['RunEmptySuite'])
    return suite
Example #22
0
 def _process_value(self, name, value):
     if name == "ReRunFailed":
         return gather_failed_tests(value)
     if name == "ReRunFailedSuites":
         return gather_failed_suites(value)
     if name == "LogLevel":
         return self._process_log_level(value)
     if value == self._get_default_value(name):
         return value
     if name in ["Name", "Doc", "LogTitle", "ReportTitle"]:
         if name == "Doc":
             value = self._escape_as_data(value)
         return value.replace("_", " ")
     if name in ["Metadata", "TagDoc"]:
         if name == "Metadata":
             value = [self._escape_as_data(v) for v in value]
         return [self._process_metadata_or_tagdoc(v) for v in value]
     if name in ["Include", "Exclude"]:
         return [self._format_tag_patterns(v) for v in value]
     if name in self._output_opts and (not value or value.upper() == "NONE"):
         return None
     if name == "OutputDir":
         return abspath(value)
     if name in ["SuiteStatLevel", "ConsoleWidth"]:
         return self._convert_to_positive_integer_or_default(name, value)
     if name == "VariableFiles":
         return [split_args_from_name_or_path(item) for item in value]
     if name == "ReportBackground":
         return self._process_report_background(value)
     if name == "TagStatCombine":
         return [self._process_tag_stat_combine(v) for v in value]
     if name == "TagStatLink":
         return [v for v in [self._process_tag_stat_link(v) for v in value] if v]
     if name == "Randomize":
         return self._process_randomize_value(value)
     if name == "RemoveKeywords":
         self._validate_remove_keywords(value)
     if name == "FlattenKeywords":
         self._validate_flatten_keywords(value)
     return value
Example #23
0
 def _process_value(self, name, value):
     if name == 'ReRunFailed':
         return gather_failed_tests(value)
     if name == 'ReRunFailedSuites':
         return gather_failed_suites(value)
     if name == 'LogLevel':
         return self._process_log_level(value)
     if value == self._get_default_value(name):
         return value
     if name == 'Doc':
         return self._escape_as_data(value)
     if name in ['Metadata', 'TagDoc']:
         if name == 'Metadata':
             value = [self._escape_as_data(v) for v in value]
         return [self._process_metadata_or_tagdoc(v) for v in value]
     if name in ['Include', 'Exclude']:
         return [self._format_tag_patterns(v) for v in value]
     if name in self._output_opts and (not value or value.upper() == 'NONE'):
         return None
     if name == 'OutputDir':
         return abspath(value)
     if name in ['SuiteStatLevel', 'ConsoleWidth']:
         return self._convert_to_positive_integer_or_default(name, value)
     if name == 'VariableFiles':
         return [split_args_from_name_or_path(item) for item in value]
     if name == 'ReportBackground':
         return self._process_report_background(value)
     if name == 'TagStatCombine':
         return [self._process_tag_stat_combine(v) for v in value]
     if name == 'TagStatLink':
         return [v for v in [self._process_tag_stat_link(v) for v in value] if v]
     if name == 'Randomize':
         return self._process_randomize_value(value)
     if name == 'RemoveKeywords':
         self._validate_remove_keywords(value)
     if name == 'FlattenKeywords':
         self._validate_flatten_keywords(value)
     return value
 def test_unc_path(self):
     assert_equal(abspath(self.unc_path), self.unc_exp)
Example #25
0
 def _get_cwd(self, cwd):
     if cwd:
         return cwd.replace('/', os.sep)
     return abspath('.')
 def _verify(self, file_name, expected_name):
     path = abspath(file_name)
     actual = ByPathImporter(None)._split_path_to_module(path)
     assert_equals(actual, (dirname(path), expected_name))
 def test_add_drive(self):
     drive = os.path.abspath(__file__)[:2]
     for path in ['.', os.path.basename(__file__), r'\abs\path']:
         assert_true(abspath(path).startswith(drive))
Example #28
0
 def __init__(self, parent=None, source=None):
     self.parent = parent
     self.source = utils.abspath(source) if source else None
     self.children = []
     self._tables = utils.NormalizedDict(self._get_tables())
Example #29
0
 def _get_cwd(self, cwd):
     if cwd:
         return cwd.replace("/", os.sep)
     return abspath(".")
Example #30
0
 def __init__(self, parent=None, source=None):
     self.parent = parent
     self.source = utils.abspath(source) if source else None
     self.children = []
     self._tables = utils.NormalizedDict(self._get_tables())
Example #31
0
 def _validate_screenshot_path(self, path):
     path = utils.abspath(self._norm_path(path))
     if not os.path.exists(os.path.dirname(path)):
         raise RuntimeError("Directory '%s' where to save the screenshot "
                            "does not exist" % os.path.dirname(path))
     return path
Example #32
0
        window = gdk.get_default_root_window()
        if not window:
            raise RuntimeError('Taking screenshot failed')
        width, height = window.get_size()
        pb = gdk.Pixbuf(gdk.COLORSPACE_RGB, False, 8, width, height)
        pb = pb.get_from_drawable(window, window.get_colormap(),
                                  0, 0, 0, 0, width, height)
        if not pb:
            raise RuntimeError('Taking screenshot failed')
        pb.save(path, 'jpeg')

    def _pil_screenshot(self, path):
        ImageGrab.grab().save(path, 'JPEG')

    def _no_screenshot(self, path):
        raise RuntimeError('Taking screenshots is not supported on this platform '
                           'by default. See library documentation for details.')


if __name__ == "__main__":
    if len(sys.argv) not in [2, 3]:
        sys.exit("Usage: %s <path> [wx|gtk|pil] OR test [<path>]" % os.path.basename(sys.argv[0]))
    if sys.argv[1] == 'test':
        sys.exit(0 if ScreenshotTaker().test(*sys.argv[2:]) else 1)
    path = utils.abspath(sys.argv[1])
    module = sys.argv[2] if len(sys.argv) == 3 else None
    shooter = ScreenshotTaker(module)
    print 'Using %s modules' % shooter.module
    shooter(path)
    print path
import tempfile
import inspect
import shutil
import sys
import os
import re
from os.path import basename, dirname, exists, join, normpath

from robot.errors import DataError
from robot.utils import abspath, JYTHON, WINDOWS, PY3
from robot.utils.importer import Importer, ByPathImporter
from robot.utils.asserts import (assert_equals, assert_true, assert_raises,
                                 assert_raises_with_msg)


CURDIR = dirname(abspath(__file__))
LIBDIR = normpath(join(CURDIR, '..', '..', 'atest', 'testresources', 'testlibs'))
TEMPDIR = tempfile.gettempdir()
TESTDIR = join(TEMPDIR, 'robot-importer-testing')
WINDOWS_PATH_IN_ERROR = re.compile(r"'\w:\\")
if PY3:
    unicode = str


def assert_prefix(error, expected):
    message = unicode(error)
    count = 3 if WINDOWS_PATH_IN_ERROR.search(message) else 2
    prefix = ':'.join(message.split(':')[:count]) + ':'
    assert_equals(prefix, expected)

 def _validate_screenshot_path(self, path):
     path = abspath(self._norm_path(path))
     if not os.path.exists(os.path.dirname(path)):
         raise RuntimeError("Directory '%s' where to save the screenshot "
                            "does not exist" % os.path.dirname(path))
     return path