Exemplo n.º 1
0
    def __init__(self, path):
        self.project_path = path
        self.active_path = None
        self.count = 0
        self.results = None
        self.isolated = set()
        self.conf_hashes = dict(
            (self._path(i.parent), get_ast_hash(i))
            for i in Path(path).glob('tests/**/conftest.py'))
        try:
            with path.joinpath('build/tests.json').open() as fp:
                hashes = json.load(fp)
        except (FileNotFoundError, json.decoder.JSONDecodeError):
            hashes = {'tests': {}, 'contracts': {}, 'tx': {}}

        self.tests = dict(
            (k, v) for k, v in hashes['tests'].items()
            if Path(k).exists() and self._get_hash(k) == v['sha1'])
        self.contracts = dict(
            (k, v['bytecodeSha1']) for k, v in build.items() if v['bytecode'])
        changed_contracts = set(
            k for k, v in hashes['contracts'].items()
            if k not in self.contracts or v != self.contracts[k])
        if changed_contracts:
            for txhash, coverage_eval in hashes['tx'].items():
                if not changed_contracts.intersection(coverage_eval.keys()):
                    coverage.add_cached(txhash, coverage_eval)
            self.tests = dict(
                (k, v) for k, v in self.tests.items()
                if v['isolated'] is not False
                and not changed_contracts.intersection(v['isolated']))
        else:
            for txhash, coverage_eval in hashes['tx'].items():
                coverage.add_cached(txhash, coverage_eval)
Exemplo n.º 2
0
    def __init__(self, project):
        self.project = project
        self.project_path = project._project_path
        self.active_path = None
        self.count = 0
        self.results = None
        self.isolated = set()
        glob = self.project_path.glob("tests/**/conftest.py")
        self.conf_hashes = dict(
            (self._path(i.parent), get_ast_hash(i)) for i in glob)
        try:
            with self.project_path.joinpath("build/tests.json").open() as fp:
                hashes = json.load(fp)
        except (FileNotFoundError, json.decoder.JSONDecodeError):
            hashes = {"tests": {}, "contracts": {}, "tx": {}}

        self.tests = dict(
            (k, v) for k, v in hashes["tests"].items()
            if Path(k).exists() and self._get_hash(k) == v["sha1"])
        build = self.project._build
        self.contracts = dict(
            (k, v["bytecodeSha1"]) for k, v in build.items() if v["bytecode"])
        changed_contracts = set(
            k for k, v in hashes["contracts"].items()
            if k not in self.contracts or v != self.contracts[k])
        if changed_contracts:
            for txhash, coverage_eval in hashes["tx"].items():
                if not changed_contracts.intersection(coverage_eval.keys()):
                    coverage.add_cached_transaction(txhash, coverage_eval)
            self.tests = dict(
                (k, v) for k, v in self.tests.items()
                if v["isolated"] is not False
                and not changed_contracts.intersection(v["isolated"]))
        else:
            for txhash, coverage_eval in hashes["tx"].items():
                coverage.add_cached_transaction(txhash, coverage_eval)
Exemplo n.º 3
0
 def _get_hash(self, path):
     hash_ = get_ast_hash(path)
     for confpath in filter(lambda k: k in path, sorted(self.conf_hashes)):
         hash_ += self.conf_hashes[confpath]
     return sha1(hash_.encode()).hexdigest()