コード例 #1
0
    def pytest_terminal_summary(self, terminalreporter):
        """
        Add a section to terminal summary reporting.

        * When the `--disable-warnings` flag is active, removes all raised warnings
          prior to outputting the final console report.

        * When `--coverage` is active, outputs the result to stdout and saves the
          final report json.

        Arguments
        ---------
        terminalreporter : `_pytest.terminal.TerminalReporter`
            The internal terminal reporter object
        """
        if self.config.getoption(
                "--disable-warnings") and "warnings" in terminalreporter.stats:
            del terminalreporter.stats["warnings"]

        if CONFIG.argv["coverage"]:
            terminalreporter.section("Coverage")

            # output coverage report to console
            coverage_eval = coverage.get_merged_coverage_eval()
            for line in output._build_coverage_output(coverage_eval):
                terminalreporter.write_line(line)

            # save coverage report as `reports/coverage.json`
            output._save_coverage_report(
                self.project._build,
                coverage_eval,
                self.project_path.joinpath(self.project._structure["reports"]),
            )
コード例 #2
0
    def pytest_sessionfinish(self, session):
        """
        Called after whole test run finished, right before returning the exit
        status to the system.

        * Aggregates results from `build/tests-{workerid}.json` files and stores
          them as `build/test.json`.
        * Generates coverage report and outputs results to console
        * Closes all active projects
        """
        if session.testscollected == 0:
            raise pytest.UsageError(
                "xdist workers failed to collect tests. Ensure all test cases are "
                "isolated with the module_isolation or fn_isolation fixtures.\n\n"
                "https://eth-brownie.readthedocs.io/en/stable/tests.html#isolating-tests"
            )
        build_path = self.project._build_path

        report = {"tests": {}, "contracts": self.contracts, "tx": {}}
        for path in list(build_path.glob("tests-*.json")):
            with path.open() as fp:
                data = json.load(fp)
            assert data["contracts"] == report["contracts"]
            report["tests"].update(data["tests"])
            report["tx"].update(data["tx"])
            path.unlink()
        with build_path.joinpath("tests.json").open("w") as fp:
            json.dump(report, fp, indent=2, sort_keys=True, default=sorted)
        coverage_eval = coverage.get_merged_coverage_eval(report["tx"])
        self._sessionfinish_coverage(coverage_eval)

        for project in get_loaded_projects():
            project.close(raises=False)
コード例 #3
0
def test_exclude_coverage(coverage_mode, tester, config):
    tester.useSafeMath(5, 10)

    coverage_eval = coverage.get_merged_coverage_eval()
    report = _build_coverage_output(coverage_eval)
    assert _build_coverage_output(coverage_eval) == report

    config.settings["reports"]["exclude_contracts"] = "SafeMath"
    assert _build_coverage_output(coverage_eval) != report
コード例 #4
0
ファイル: runner.py プロジェクト: edgarnunogubinvest/brownie
    def _sessionfinish(self, path):
        txhash = set(x for v in self.tests.values() for x in v["txhash"])
        coverage_eval = dict((k, v) for k, v in coverage.get_coverage_eval().items() if k in txhash)
        report = {"tests": self.tests, "contracts": self.contracts, "tx": coverage_eval}

        with self.project_path.joinpath(path).open("w") as fp:
            json.dump(report, fp, indent=2, sort_keys=True, default=sorted)
        coverage_eval = coverage.get_merged_coverage_eval()
        self._sessionfinish_coverage(coverage_eval)
        self.project.close()
コード例 #5
0
def test_exclude_coverage_by_glob(coverage_mode, tester, vypertester, config):
    tester.useSafeMath(5, 10)
    vypertester.overflow(1, 2)

    coverage_eval = coverage.get_merged_coverage_eval()
    report = _build_coverage_output(coverage_eval)
    assert _build_coverage_output(coverage_eval) == report

    config.settings["reports"]["exclude_paths"] = "contracts/*.vy"
    assert _build_coverage_output(coverage_eval) != report
コード例 #6
0
 def pytest_sessionfinish(self, session):
     if session.testscollected == 0:
         raise pytest.UsageError(
             "xdist workers failed to collect tests. Ensure all test cases are "
             "isolated with the module_isolation or fn_isolation fixtures.\n\n"
             "https://eth-brownie.readthedocs.io/en/stable/tests.html#isolating-tests"
         )
     report = {"tests": {}, "contracts": self.contracts, "tx": {}}
     for path in list(self.project_path.glob("build/tests-*.json")):
         with path.open() as fp:
             data = json.load(fp)
         assert data["contracts"] == report["contracts"]
         report["tests"].update(data["tests"])
         report["tx"].update(data["tx"])
         path.unlink()
     with self.project_path.joinpath("build/tests.json").open("w") as fp:
         json.dump(report, fp, indent=2, sort_keys=True, default=sorted)
     coverage_eval = coverage.get_merged_coverage_eval(report["tx"])
     self._sessionfinish_coverage(coverage_eval)
     self.project.close()