PKNLnbbpytest_markdown/__init__.py''' A py.test plugin that runs tests its found in your Markdown files. ''' __version__ = '0.0.2' PK/L`SSpytest_markdown/plugin.pyimport imp import pytest from _pytest.python import Module from mistletoe.base_renderer import BaseRenderer class MarkdownItem(Module): def __init__(self, name, file, code, nodeid=None): self._code_obj = imp.new_module(name) exec(code, self._code_obj.__dict__) super().__init__(name, file, nodeid=nodeid) def _getobj(self): return self._code_obj class MarkdownCollector(BaseRenderer): def __init__(self, item): super().__init__() self.item = item self.stack = [(0, self.item, self.item.name,)] self.collected = [] def render_heading(self, token): name = ''.join(self.render(c) for c in token.children).lower().replace(' ', '-') while self.stack[-1][0] >= token.level: self.stack.pop() nodeid = '::'.join(s[2] for s in self.stack) + '::' + name self.stack.append(( token.level, pytest.Item(name, self.stack[-1][1], nodeid=nodeid), name )) return '' def render_block_code(self, token): if token.language != 'python': return '' output = ''.join(c.content for c in token.children) if output.startswith('\n'): return '' name = f'line_{token.start}' if output.lower().strip().startswith('# conftest.py\n'): nodeid = self.stack[-1][1].nodeid else: nodeid = self.stack[-1][1].nodeid + '::' + name mi = MarkdownItem( name, self.stack[-1][1], output, nodeid=nodeid ) self.collected.append(mi) return '' def collect(self, token): self.render(token) return self.collected class MarkdownFile(pytest.File): def collect(self): fp = self.fspath.open() from mistletoe import Document with MarkdownCollector(self) as collector: for item in collector.collect(Document(fp)): yield item def pytest_collect_file(parent, path): if path.ext == '.md': return MarkdownFile(path, parent) PK!H.00pytest_markdown-0.0.2.dist-info/entry_points.txt.,I-.14JON-/)&e䔦gqqPK!HNO%pytest_markdown-0.0.2.dist-info/WHEEL HM K-*ϳR03rOK-J,/RH,zd&Y)r$[)T&UrPK!HϷz(pytest_markdown-0.0.2.dist-info/METADATA]S]o@|XW| d4)I&x{mu[xwvn dWd27Rjv}ԚD$e0e`X)\4zԃ⫤h bGb jЋ iLxjhTPǍInvtPܩ-.,i 5 n60 HZ&ߌO8 n.6y?Q9C|xN+32MHם$dHUgq Y\X,w}F}pT92ISE޾'DQ?3[rۡ>+:aѿOkԳdUޓO`|Y?ʇc>fˢ{b,>pW;֩|q-t$@KQM6v5vЫpI {OEOjimO8p\i8T lʷ^sb;`'U+|*Q*8}> ^}W-/PK!H7&pytest_markdown-0.0.2.dist-info/RECORDMB@}X(9b34>{jxޗ Qorj !0P G˃4mdō_ݱyh5٠q$0"/ 'L5$5X^$%rv6nAd1Wl]4IC>֡| +MY$.7Wڮ mxM ڪGm^g=}gzfa