xonsh/tests/test_news.py
Anthony Scopatz 3779e8b520 test fix
2018-07-14 13:40:04 -05:00

63 lines
2 KiB
Python

# -*- coding: utf-8 -*-
"""Testing that news entries are well formed."""
import os
import re
import pytest
from xonsh.platform import scandir
NEWSDIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'news')
CATEGORIES = frozenset(['Added', 'Changed', 'Deprecated', 'Removed',
'Fixed', 'Security'])
single_grave_reg = re.compile(r'[^`]`[^`]+`[^`_]')
def check_news_file(fname):
name = fname.name
with open(fname.path) as f:
lines = f.read().splitlines()
form = ""
for i, l in enumerate(lines):
# search the graves
if '`' in l:
if single_grave_reg.search(l):
pytest.fail("{}:{}: single grave accents"
" are not valid rst".format(name, i+1),
pytrace=False)
# determine the form of line
if l.startswith('**'):
cat = l[2:].rsplit(':')[0]
if cat not in CATEGORIES:
pytest.fail('{}:{}: {!r} not a proper category '
'must be one of {}'
''.format(name, i+1, cat, list(CATEGORIES)),
pytrace=False)
if l.endswith('None'):
form += '3'
else:
form += '2'
elif l.startswith('* ') or l.startswith('- ') or l.startswith(' '):
form += '1'
elif l.strip() == '':
form += '0'
else:
pytest.fail('{}:{}: invalid rst'.format(name, i+1),
pytrace=False)
# The file should have:
# empty lines around categories
# at least one content line in a non null category
reg = re.compile(r'^(3(0|$)|201(1|0)*0)+$')
if not reg.match(form):
pytest.fail('{}: invalid rst'.format(name),
pytrace=False)
@pytest.mark.parametrize('fname', list(scandir(NEWSDIR)))
def test_news(fname):
base, ext = os.path.splitext(fname.path)
assert 'rst' in ext
check_news_file(fname)