Exemple #1
0
    def deserialize_repr_entry(entry_data):
        data = entry_data["data"]
        entry_type = entry_data["type"]
        if entry_type == "ReprEntry":
            reprfuncargs = None
            reprfileloc = None
            reprlocals = None
            if data["reprfuncargs"]:
                reprfuncargs = ReprFuncArgs(**data["reprfuncargs"])
            if data["reprfileloc"]:
                reprfileloc = ReprFileLocation(**data["reprfileloc"])
            if data["reprlocals"]:
                reprlocals = ReprLocals(data["reprlocals"]["lines"])

            reprentry: Union[ReprEntry, ReprEntryNative] = ReprEntry(
                lines=data["lines"],
                reprfuncargs=reprfuncargs,
                reprlocals=reprlocals,
                reprfileloc=reprfileloc,
                style=data["style"],
            )
        elif entry_type == "ReprEntryNative":
            reprentry = ReprEntryNative(data["lines"])
        else:
            _report_unserialization_failure(entry_type, TestReport, reportdict)
        return reprentry
 def repr_failure(self, excinfo, style=None):
     if not excinfo.errisinstance(MypyAssertionError):
         return super().repr_failure(excinfo,
                                     style=style)  # pragma: no cover
     reprfileloc_key = ("filelocrepr" if PYTEST_VERSION_INFO <
                        (5, 4) else "reprfileloc")
     exception_repr = excinfo.getrepr(style="short")
     exception_repr.reprcrash.message = ""
     exception_repr.reprtraceback.reprentries = [
         ReprEntry(
             lines=mismatch.lines,
             style="short",
             reprlocals=None,
             reprfuncargs=None,
             **{
                 reprfileloc_key:
                 ReprFileLocation(
                     path=self.parent.fspath,
                     lineno=mismatch.lineno,
                     message=mismatch.error_message,
                 )
             },
         ) for mismatch in excinfo.value.errors
     ]
     return exception_repr
Exemple #3
0
    def assembled_report(reportdict):
        from _pytest._code.code import (
            ReprEntry,
            ReprEntryNative,
            ReprExceptionInfo,
            ReprFileLocation,
            ReprFuncArgs,
            ReprLocals,
            ReprTraceback,
        )

        if reportdict["longrepr"]:
            if ("reprcrash" in reportdict["longrepr"]
                    and "reprtraceback" in reportdict["longrepr"]):

                reprtraceback = reportdict["longrepr"]["reprtraceback"]
                reprcrash = reportdict["longrepr"]["reprcrash"]

                unserialized_entries = []
                reprentry = None
                for entry_data in reprtraceback["reprentries"]:
                    data = entry_data["data"]
                    entry_type = entry_data["type"]
                    if entry_type == "ReprEntry":
                        reprfuncargs = None
                        reprfileloc = None
                        reprlocals = None
                        if data["reprfuncargs"]:
                            reprfuncargs = ReprFuncArgs(**data["reprfuncargs"])
                        if data["reprfileloc"]:
                            reprfileloc = ReprFileLocation(
                                **data["reprfileloc"])
                        if data["reprlocals"]:
                            reprlocals = ReprLocals(
                                data["reprlocals"]["lines"])

                        reprentry = ReprEntry(
                            lines=data["lines"],
                            reprfuncargs=reprfuncargs,
                            reprlocals=reprlocals,
                            filelocrepr=reprfileloc,
                            style=data["style"],
                        )
                    elif entry_type == "ReprEntryNative":
                        reprentry = ReprEntryNative(data["lines"])
                    else:
                        report_unserialization_failure(entry_type, name,
                                                       reportdict)
                    unserialized_entries.append(reprentry)
                reprtraceback["reprentries"] = unserialized_entries

                exception_info = ReprExceptionInfo(
                    reprtraceback=ReprTraceback(**reprtraceback),
                    reprcrash=ReprFileLocation(**reprcrash),
                )

                for section in reportdict["longrepr"]["sections"]:
                    exception_info.addsection(*section)
                reportdict["longrepr"] = exception_info
        return reportdict
Exemple #4
0
    def _from_json(cls, reportdict):
        """
        This was originally the serialize_report() function from xdist (ca03269).

        Factory method that returns either a TestReport or CollectReport, depending on the calling
        class. It's the callers responsibility to know which class to pass here.

        Experimental method.
        """
        if reportdict["longrepr"]:
            if ("reprcrash" in reportdict["longrepr"]
                    and "reprtraceback" in reportdict["longrepr"]):

                reprtraceback = reportdict["longrepr"]["reprtraceback"]
                reprcrash = reportdict["longrepr"]["reprcrash"]

                unserialized_entries = []
                reprentry = None
                for entry_data in reprtraceback["reprentries"]:
                    data = entry_data["data"]
                    entry_type = entry_data["type"]
                    if entry_type == "ReprEntry":
                        reprfuncargs = None
                        reprfileloc = None
                        reprlocals = None
                        if data["reprfuncargs"]:
                            reprfuncargs = ReprFuncArgs(**data["reprfuncargs"])
                        if data["reprfileloc"]:
                            reprfileloc = ReprFileLocation(
                                **data["reprfileloc"])
                        if data["reprlocals"]:
                            reprlocals = ReprLocals(
                                data["reprlocals"]["lines"])

                        reprentry = ReprEntry(
                            lines=data["lines"],
                            reprfuncargs=reprfuncargs,
                            reprlocals=reprlocals,
                            filelocrepr=reprfileloc,
                            style=data["style"],
                        )
                    elif entry_type == "ReprEntryNative":
                        reprentry = ReprEntryNative(data["lines"])
                    else:
                        _report_unserialization_failure(
                            entry_type, cls, reportdict)
                    unserialized_entries.append(reprentry)
                reprtraceback["reprentries"] = unserialized_entries

                exception_info = ReprExceptionInfo(
                    reprtraceback=ReprTraceback(**reprtraceback),
                    reprcrash=ReprFileLocation(**reprcrash),
                )

                for section in reportdict["longrepr"]["sections"]:
                    exception_info.addsection(*section)
                reportdict["longrepr"] = exception_info

        return cls(**reportdict)
Exemple #5
0
    def assembled_report(reportdict):
        from _pytest._code.code import (
            ReprEntry,
            ReprEntryNative,
            ReprExceptionInfo,
            ReprFileLocation,
            ReprFuncArgs,
            ReprLocals,
            ReprTraceback
        )
        if reportdict['longrepr']:
            if 'reprcrash' in reportdict['longrepr'] and 'reprtraceback' in reportdict['longrepr']:

                reprtraceback = reportdict['longrepr']['reprtraceback']
                reprcrash = reportdict['longrepr']['reprcrash']

                unserialized_entries = []
                reprentry = None
                for entry_data in reprtraceback['reprentries']:
                    data = entry_data['data']
                    entry_type = entry_data['type']
                    if entry_type == 'ReprEntry':
                        reprfuncargs = None
                        reprfileloc = None
                        reprlocals = None
                        if data['reprfuncargs']:
                            reprfuncargs = ReprFuncArgs(
                                **data['reprfuncargs'])
                        if data['reprfileloc']:
                            reprfileloc = ReprFileLocation(
                                **data['reprfileloc'])
                        if data['reprlocals']:
                            reprlocals = ReprLocals(
                                data['reprlocals']['lines'])

                        reprentry = ReprEntry(
                            lines=data['lines'],
                            reprfuncargs=reprfuncargs,
                            reprlocals=reprlocals,
                            filelocrepr=reprfileloc,
                            style=data['style']
                        )
                    elif entry_type == 'ReprEntryNative':
                        reprentry = ReprEntryNative(data['lines'])
                    else:
                        report_unserialization_failure(
                            entry_type, name, reportdict)
                    unserialized_entries.append(reprentry)
                reprtraceback['reprentries'] = unserialized_entries

                exception_info = ReprExceptionInfo(
                    reprtraceback=ReprTraceback(**reprtraceback),
                    reprcrash=ReprFileLocation(**reprcrash),
                )

                for section in reportdict['longrepr']['sections']:
                    exception_info.addsection(*section)
                reportdict['longrepr'] = exception_info
        return reportdict
def handle_teardowns(item):
    __tracebackhide__ = True
    case = item._location

    teardown_groups = case._teardown_groups
    for group in teardown_groups:
        if group in case._helper._level_stack:
            start_time = time()
            try:
                group._teardown_group()
            except:
                # handle error during group setup
                excinfo = ExceptionInfo()
                stop_time = time()
                nodeid = item.nodeid.split("::")[0] + "::"
                nodeid += group._inline_description
                location = group._last_location
                keywords = {}
                outcome = "failed"
                longrepr = excinfo.getrepr()
                when = "teardown"
                sections = []
                duration = stop_time - start_time
                context_lines = [
                    "Context:",
                    "",
                ]
                context_lines += str(location).split("\n")
                context_lines[-1] = ">" + context_lines[-1][1:]
                entry = ReprEntry(
                    context_lines,
                    None,
                    None,
                    None,
                    "long",
                )
                if hasattr(longrepr, "chain"):
                    reprtraceback = longrepr.chain[0][0]
                else:
                    reprtraceback = longrepr.reprtraceback
                reprtraceback.reprentries.insert(0, entry)
                report = TestReport(
                    nodeid,
                    location,
                    keywords,
                    outcome,
                    longrepr,
                    when,
                    sections,
                    duration,
                )
                item.ihook.pytest_runtest_logreport(report=report)
 def setup_contextional_groups(self, nodeid, location):
     __tracebackhide__ = True
     for group in location._group._setup_ancestry:
         if group not in group._helper._level_stack:
             if self.showlongtestinfo:
                 group._pytest_writer = self
             start_time = time()
             try:
                 group._setup_group()
             except:
                 # handle error during group setup
                 excinfo = ExceptionInfo()
                 stop_time = time()
                 nodeid = nodeid.split("::")[0] + "::"
                 nodeid += group._inline_description
                 location = group._last_location
                 keywords = {}
                 outcome = "failed"
                 longrepr = excinfo.getrepr()
                 when = "setup"
                 sections = []
                 duration = stop_time - start_time
                 context_lines = [
                     "Context:",
                     "",
                 ]
                 context_lines += str(location).split("\n")
                 context_lines[-1] = ">" + context_lines[-1][1:]
                 entry = ReprEntry(context_lines, None, None, None, "long")
                 if hasattr(longrepr, "chain"):
                     reprtraceback = longrepr.chain[0][0]
                 else:
                     reprtraceback = longrepr.reprtraceback
                 reprtraceback.reprentries.insert(0, entry)
                 report = TestReport(
                     nodeid,
                     location,
                     keywords,
                     outcome,
                     longrepr,
                     when,
                     sections,
                     duration,
                 )
                 self.pytest_runtest_logreport(report)
def pytest_runtest_makereport(item, call):
    when = call.when
    duration = call.stop - call.start
    keywords = dict([(x, 1) for x in item.keywords])
    excinfo = call.excinfo
    sections = []
    if not call.excinfo:
        outcome = "passed"
        longrepr = None
    else:
        if not isinstance(excinfo, ExceptionInfo):
            outcome = "failed"
            longrepr = excinfo
        elif excinfo.errisinstance(skip.Exception):
            outcome = "skipped"
            r = excinfo._getreprcrash()
            longrepr = (str(r.path), r.lineno, r.message)
        else:
            outcome = "failed"
            if call.when == "call":
                if isinstance(item.location, Case):
                    case = item.location
                    longrepr = item.repr_failure(excinfo)
                    context_lines = [
                        "Context:",
                    ]
                    context_lines += case._full_description.split("\n")
                    context_lines[-1] = ">" + context_lines[-1][1:]
                    if excinfo.errisinstance(CascadingFailureError):
                        context_lines.append("E       CASCADING FAILURE")

                    entry = ReprEntry(context_lines, None, None, None, "long")
                    if hasattr(longrepr, "chain"):
                        reprtraceback = longrepr.chain[0][0]
                    else:
                        reprtraceback = longrepr.reprtraceback
                    if excinfo.errisinstance(CascadingFailureError):
                        reprtraceback.reprentries[0] = entry
                    else:
                        reprtraceback.reprentries.insert(0, entry)
                else:
                    longrepr = item.repr_failure(excinfo)
            else:
    def assembled_report(reportdict):
        from _pytest._code.code import (ReprEntry, ReprExceptionInfo,
                                        ReprFileLocation, ReprFuncArgs,
                                        ReprLocals, ReprTraceback)
        if reportdict['longrepr']:
            if 'reprcrash' and 'reprtraceback' in reportdict['longrepr']:

                reprtraceback = reportdict['longrepr']['reprtraceback']
                reprcrash = reportdict['longrepr']['reprcrash']

                unserialized_entries = []
                for entry in reprtraceback['reprentries']:
                    reprfuncargs, reprfileloc, reprlocals = None, None, None
                    if entry['reprfuncargs']:
                        reprfuncargs = ReprFuncArgs(**entry['reprfuncargs'])
                    if entry['reprfileloc']:
                        reprfileloc = ReprFileLocation(**entry['reprfileloc'])
                    if entry['reprlocals']:
                        reprlocals = ReprLocals(entry['reprlocals']['lines'])

                    reprentry = ReprEntry(lines=entry['lines'],
                                          reprfuncargs=reprfuncargs,
                                          reprlocals=reprlocals,
                                          filelocrepr=reprfileloc,
                                          style=entry['style'])
                    unserialized_entries.append(reprentry)
                reprtraceback['reprentries'] = unserialized_entries

                exception_info = ReprExceptionInfo(
                    reprtraceback=ReprTraceback(**reprtraceback),
                    reprcrash=ReprFileLocation(**reprcrash),
                )

                for section in reportdict['longrepr']['sections']:
                    exception_info.addsection(*section)
                reportdict['longrepr'] = exception_info
        return reportdict
Exemple #10
0
    def value(self, name, what):
        from _pytest._code.code import (ReprEntry, ReprEntryNative,
                                        ReprExceptionInfo, ReprFileLocation,
                                        ReprFuncArgs, ReprLocals,
                                        ReprTraceback)
        if not isinstance(what, str):
            unserialized_entries = []
            reprentry = None
            for entry_data in what.reprtraceback.reprentries:
                data = entry_data['data']
                entry_type = entry_data['type']
                if entry_type == 'ReprEntry':
                    reprfuncargs = None
                    reprfileloc = None
                    reprlocals = None
                    if data['reprfuncargs']:
                        reprfuncargs = ReprFuncArgs(**data['reprfuncargs'])
                    if data['reprfileloc']:
                        reprfileloc = ReprFileLocation(**data['reprfileloc'])
                    if data['reprlocals']:
                        reprlocals = ReprLocals(data['reprlocals']['lines'])

                    reprentry = ReprEntry(lines=data['lines'],
                                          reprfuncargs=reprfuncargs,
                                          reprlocals=reprlocals,
                                          filelocrepr=reprfileloc,
                                          style=data['style'])
                elif entry_type == 'ReprEntryNative':
                    reprentry = ReprEntryNative(data['lines'])
                else:
                    report_unserialization_failure(entry_type, name,
                                                   reportdict)
                unserialized_entries.append(reprentry)

            what.reprtraceback.reprentries = unserialized_entries
        return element_maker(self.name or name,
                             self.namespace)(legalize_xml(unicodify(what)))