Exemplo n.º 1
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)))
Exemplo n.º 2
0
 def _parse(self, path):
     try:
         return TestData(source=abspath(path),
                         include_suites=self.include_suites,
                         extensions=self.extensions)
     except DataError as err:
         raise DataError("Parsing '%s' failed: %s" % (path, err.message))
Exemplo n.º 3
0
 def _parse(self, path):
     try:
         return TestData(source=abspath(path),
                         include_suites=self.include_suites,
                         extensions=self.extensions)
     except DataError as err:
         raise DataError("Parsing '%s' failed: %s" % (path, err.message))
Exemplo n.º 4
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)))
Exemplo n.º 5
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
Exemplo n.º 6
0
Arquivo: scopes.py Projeto: Garjy/RIDE
 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
Exemplo n.º 7
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 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
Exemplo n.º 8
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 == 'MaxErrorLines':
         return self._process_max_error_lines(value)
     if name == 'RemoveKeywords':
         self._validate_remove_keywords(value)
     if name == 'FlattenKeywords':
         self._validate_flatten_keywords(value)
     if name == 'WarnOnSkipped':
         with LOGGER.cache_only:
             LOGGER.warn("Option '--warnonskippedfiles' is deprecated and "
                         "has no effect. Nowadays all skipped files are "
                         "reported.")
     return value
Exemplo n.º 9
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 = abspath(os.path.join(self['OutputDir'], name))
        self._create_output_dir(os.path.dirname(path), option)
        return path
Exemplo n.º 10
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 == 'MaxErrorLines':
         return self._process_max_error_lines(value)
     if name == 'RemoveKeywords':
         self._validate_remove_keywords(value)
     if name == 'FlattenKeywords':
         self._validate_flatten_keywords(value)
     if name == 'WarnOnSkipped':
         with LOGGER.cache_only:
             LOGGER.warn("Option '--warnonskippedfiles' is deprecated and "
                         "has no effect. Nowadays all skipped files are "
                         "reported.")
     return value
Exemplo n.º 11
0
 def main(self, datasources, title=None, **options):
     outfile = abspath(datasources.pop())
     suite = TestSuiteFactory(datasources, **options)
     self._write_test_doc(suite, outfile, title)
     self.console(outfile)
Exemplo n.º 12
0
class _BaseSettings(object):
    _cli_opts = {'Name'             : ('name', None),
                 'Doc'              : ('doc', None),
                 'Metadata'         : ('metadata', []),
                 'TestNames'        : ('test', []),
                 'ReRunFailed'      : ('rerunfailed', 'NONE'),
                 'DeprecatedRunFailed': ('runfailed', 'NONE'),  # TODO: Remove in RF 3.0
                 'SuiteNames'       : ('suite', []),
                 'SetTag'           : ('settag', []),
                 'Include'          : ('include', []),
                 'Exclude'          : ('exclude', []),
                 'Critical'         : ('critical', None),
                 'NonCritical'      : ('noncritical', None),
                 'OutputDir'        : ('outputdir', abspath('.')),
                 'Log'              : ('log', 'log.html'),
                 'Report'           : ('report', 'report.html'),
                 'XUnit'            : ('xunit', None),
                 'SplitLog'         : ('splitlog', False),
                 'TimestampOutputs' : ('timestampoutputs', False),
                 'LogTitle'         : ('logtitle', None),
                 'ReportTitle'      : ('reporttitle', None),
                 'ReportBackground' : ('reportbackground',
                                       ('#9e9', '#9e9', '#f66')),
                 'SuiteStatLevel'   : ('suitestatlevel', -1),
                 'TagStatInclude'   : ('tagstatinclude', []),
                 'TagStatExclude'   : ('tagstatexclude', []),
                 'TagStatCombine'   : ('tagstatcombine', []),
                 'TagDoc'           : ('tagdoc', []),
                 'TagStatLink'      : ('tagstatlink', []),
                 'RemoveKeywords'   : ('removekeywords', []),
                 'FlattenKeywords'  : ('flattenkeywords', []),
                 'PreRebotModifiers': ('prerebotmodifier', []),
                 'StatusRC'         : ('statusrc', True),
                 'ConsoleColors'    : ('consolecolors', 'AUTO'),
                 'MonitorColors'    : ('monitorcolors', None),  # TODO: Remove in RF 3.0
                 'StdOut'           : ('stdout', None),
                 'StdErr'           : ('stderr', None),
                 'XUnitSkipNonCritical' : ('xunitskipnoncritical', False)}
    _output_opts = ['Output', 'Log', 'Report', 'XUnit', 'DebugFile']

    def __init__(self, options=None, **extra_options):
        self.start_timestamp = format_time(time.time(), '', '-', '')
        self._opts = {}
        self._cli_opts = self._cli_opts.copy()
        self._cli_opts.update(self._extra_cli_opts)
        self._process_cli_opts(dict(options or {}, **extra_options))

    def _process_cli_opts(self, opts):
        for name, (cli_name, default) in self._cli_opts.items():
            value = opts[cli_name] if cli_name in opts else default
            if default == [] and not is_list_like(value):
                value = [value]
            self[name] = self._process_value(name, value)
        self['TestNames'] += self['ReRunFailed'] or self['DeprecatedRunFailed']

    def __setitem__(self, name, value):
        if name not in self._cli_opts:
            raise KeyError("Non-existing settings '%s'" % name)
        self._opts[name] = value

    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 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

    def _escape_as_data(self, value):
        return value

    def _process_log_level(self, level):
        level, visible_level = self._split_log_level(level.upper())
        self._opts['VisibleLogLevel'] = visible_level
        return level

    def _split_log_level(self, level):
        if ':' in level:
            level, visible_level = level.split(':', 1)
        else:
            visible_level = level
        self._validate_log_level_and_default(level, visible_level)
        return level, visible_level

    def _validate_log_level_and_default(self, log_level, default):
        if log_level not in loggerhelper.LEVELS:
            raise DataError("Invalid log level '%s'" % log_level)
        if default not in loggerhelper.LEVELS:
            raise DataError("Invalid log level '%s'" % default)
        if not loggerhelper.IsLogged(log_level)(default):
            raise DataError("Default visible log level '%s' is lower than "
                            "log level '%s'" % (default, log_level))

    def _process_randomize_value(self, original):
        value = original.lower()
        if ':' in value:
            value, seed = value.split(':', 1)
        else:
            seed = random.randint(0, sys.maxint)
        if value in ('test', 'suite'):
            value += 's'
        if value not in ('tests', 'suites', 'none', 'all'):
            self._raise_invalid_option_value('--randomize', original)
        try:
            seed = int(seed)
        except ValueError:
            self._raise_invalid_option_value('--randomize', original)
        return value, seed

    def _raise_invalid_option_value(self, option_name, given_value):
        raise DataError("Option '%s' does not support value '%s'."
                        % (option_name, given_value))

    def __getitem__(self, name):
        if name not in self._opts:
            raise KeyError("Non-existing setting '%s'" % name)
        if name in self._output_opts:
            return self._get_output_file(name)
        return self._opts[name]

    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 = abspath(os.path.join(self['OutputDir'], name))
        self._create_output_dir(os.path.dirname(path), option)
        return path

    def _process_output_name(self, option, name):
        base, ext = os.path.splitext(name)
        if self['TimestampOutputs']:
            base = '%s-%s' % (base, self.start_timestamp)
        ext = self._get_output_extension(ext, option)
        return base + ext

    def _get_output_extension(self, ext, type_):
        if ext != '':
            return ext
        if type_ in ['Output', 'XUnit']:
            return '.xml'
        if type_ in ['Log', 'Report']:
            return '.html'
        if type_ == 'DebugFile':
            return '.txt'
        raise FrameworkError("Invalid output file type: %s" % type_)

    def _create_output_dir(self, path, type_):
        try:
            if not os.path.exists(path):
                os.makedirs(path)
        except EnvironmentError as err:
            raise DataError("Creating %s file directory '%s' failed: %s"
                            % (type_.lower(), path, err.strerror))

    def _process_metadata_or_tagdoc(self, value):
        value = value.replace('_', ' ')
        if ':' in value:
            return value.split(':', 1)
        return value, ''

    def _process_report_background(self, colors):
        if colors.count(':') not in [1, 2]:
            raise DataError("Invalid report background colors '%s'." % colors)
        colors = colors.split(':')
        if len(colors) == 2:
            return colors[0], colors[0], colors[1]
        return tuple(colors)

    def _process_tag_stat_combine(self, pattern):
        if ':' in pattern:
            pattern, title = pattern.rsplit(':', 1)
        else:
            title = ''
        return self._format_tag_patterns(pattern), title.replace('_', ' ')

    def _format_tag_patterns(self, pattern):
        for search, replace in [('&', 'AND'), ('AND', ' AND '), ('OR', ' OR '),
                                ('NOT', ' NOT '), ('_', ' ')]:
            if search in pattern:
                pattern = pattern.replace(search, replace)
        while '  ' in pattern:
            pattern = pattern.replace('  ', ' ')
        if pattern.startswith(' NOT'):
            pattern = pattern[1:]
        return pattern

    def _process_tag_stat_link(self, value):
        tokens = value.split(':')
        if len(tokens) >= 3:
            return tokens[0], ':'.join(tokens[1:-1]), tokens[-1]
        raise DataError("Invalid format for option '--tagstatlink'. "
                        "Expected 'tag:link:title' but got '%s'." % value)

    def _convert_to_positive_integer_or_default(self, name, value):
        value = self._convert_to_integer(name, value)
        return value if value > 0 else self._get_default_value(name)

    def _convert_to_integer(self, name, value):
        try:
            return int(value)
        except ValueError:
            raise DataError("Option '--%s' expected integer value but got '%s'."
                            % (name.lower(), value))

    def _get_default_value(self, name):
        return self._cli_opts[name][1]

    def _validate_remove_keywords(self, values):
        for value in values:
            try:
                KeywordRemover(value)
            except DataError as err:
                raise DataError("Invalid value for option '--removekeywords'. %s" % err)

    def _validate_flatten_keywords(self, values):
        try:
            validate_flatten_keyword(values)
        except DataError as err:
            raise DataError("Invalid value for option '--flattenkeywords'. %s" % err)

    def __contains__(self, setting):
        return setting in self._cli_opts

    def __unicode__(self):
        return '\n'.join('%s: %s' % (name, self._opts[name])
                         for name in sorted(self._opts))

    @property
    def output_directory(self):
        return self['OutputDir']

    @property
    def output(self):
        return self['Output']

    @property
    def log(self):
        return self['Log']

    @property
    def report(self):
        return self['Report']

    @property
    def xunit(self):
        return self['XUnit']

    @property
    def log_level(self):
        return self['LogLevel']

    @property
    def split_log(self):
        return self['SplitLog']

    @property
    def status_rc(self):
        return self['StatusRC']

    @property
    def xunit_skip_noncritical(self):
        return self['XUnitSkipNonCritical']

    @property
    def statistics_config(self):
        return {
            'suite_stat_level': self['SuiteStatLevel'],
            'tag_stat_include': self['TagStatInclude'],
            'tag_stat_exclude': self['TagStatExclude'],
            'tag_stat_combine': self['TagStatCombine'],
            'tag_stat_link': self['TagStatLink'],
            'tag_doc': self['TagDoc'],
        }

    @property
    def critical_tags(self):
        return self['Critical']

    @property
    def non_critical_tags(self):
        return self['NonCritical']

    @property
    def remove_keywords(self):
        return self['RemoveKeywords']

    @property
    def flatten_keywords(self):
        return self['FlattenKeywords']

    @property
    def pre_rebot_modifiers(self):
        return self['PreRebotModifiers']

    @property
    def console_colors(self):
        return self['MonitorColors'] or self['ConsoleColors']
Exemplo n.º 13
0
 def __init__(self, parent=None, source=None):
     self.parent = parent
     self.source = abspath(source) if source else None
     self.children = []
     self._tables = dict(self._get_tables())
Exemplo n.º 14
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
Exemplo n.º 15
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
Exemplo n.º 16
0
            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
Exemplo n.º 17
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
Exemplo n.º 18
0
 def _get_cwd(self, cwd):
     if cwd:
         return cwd.replace('/', os.sep)
     return abspath('.')
Exemplo n.º 19
0
 def _get_cwd(self, cwd):
     if cwd:
         return cwd.replace('/', os.sep)
     return abspath('.')
Exemplo n.º 20
0
 def main(self, datasources, title=None, **options):
     outfile = abspath(datasources.pop())
     suite = TestSuiteFactory(datasources, **options)
     self._write_test_doc(suite, outfile, title)
     self.console(outfile)
Exemplo n.º 21
0
 def __init__(self, parent=None, source=None):
     self.parent = parent
     self.source = abspath(source) if source else None
     self.children = []
     self._tables = dict(self._get_tables())