mirror of
https://github.com/valitydev/salt.git
synced 2024-11-06 08:35:21 +00:00
100 lines
3.6 KiB
Python
100 lines
3.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
'''
|
|
tests.unit.doc_test
|
|
~~~~~~~~~~~~~~~~~~~~
|
|
'''
|
|
|
|
# Import Python libs
|
|
from __future__ import absolute_import
|
|
import os
|
|
import re
|
|
import logging
|
|
|
|
# Import Salt Testing libs
|
|
from tests.support.paths import CODE_DIR
|
|
from tests.support.unit import TestCase
|
|
|
|
# Import Salt libs
|
|
import salt.modules.cmdmod
|
|
import salt.utils.platform
|
|
|
|
|
|
log = logging.getLogger(__name__)
|
|
|
|
|
|
class DocTestCase(TestCase):
|
|
'''
|
|
Unit test case for testing doc files and strings.
|
|
'''
|
|
|
|
def test_check_for_doc_inline_markup(self):
|
|
'''
|
|
We should not be using the ``:doc:`` inline markup option when
|
|
cross-referencing locations. Use ``:ref:`` or ``:mod:`` instead.
|
|
|
|
This test checks for reference to ``:doc:`` usage.
|
|
|
|
See Issue #12788 for more information.
|
|
|
|
https://github.com/saltstack/salt/issues/12788
|
|
'''
|
|
salt_dir = CODE_DIR
|
|
|
|
if salt.utils.platform.is_windows():
|
|
if salt.utils.path.which('bash'):
|
|
# Use grep from git-bash when it exists.
|
|
cmd = 'bash -c \'grep -r :doc: ./salt/'
|
|
grep_call = salt.modules.cmdmod.run_stdout(cmd=cmd, cwd=salt_dir).split(os.linesep)
|
|
else:
|
|
# No grep in Windows, use findstr
|
|
# findstr in windows doesn't prepend 'Binary` to binary files, so
|
|
# use the '/P' switch to skip files with unprintable characters
|
|
cmd = 'findstr /C:":doc:" /S /P {0}\\*'.format(salt_dir)
|
|
grep_call = salt.modules.cmdmod.run_stdout(cmd=cmd).split(os.linesep)
|
|
else:
|
|
salt_dir += '/'
|
|
cmd = 'grep -r :doc: ' + salt_dir
|
|
grep_call = salt.modules.cmdmod.run_stdout(cmd=cmd).split(os.linesep)
|
|
|
|
test_ret = {}
|
|
for line in grep_call:
|
|
# Skip any .pyc files that may be present
|
|
if line.startswith('Binary'):
|
|
continue
|
|
|
|
# Only split on colons not followed by a '\' as is the case with
|
|
# Windows Drives
|
|
regex = re.compile(r':(?!\\)')
|
|
try:
|
|
key, val = regex.split(line, 1)
|
|
except ValueError:
|
|
log.error("Could not split line: %s", line)
|
|
continue
|
|
|
|
# Don't test man pages, this file, the tox or nox virtualenv files,
|
|
# the page that documents to not use ":doc:", the doc/conf.py file
|
|
# or the artifacts directory on nox CI test runs
|
|
if 'man' in key \
|
|
or '.tox{}'.format(os.sep) in key \
|
|
or '.nox{}'.format(os.sep) in key \
|
|
or 'artifacts{}'.format(os.sep) in key \
|
|
or key.endswith('test_doc.py') \
|
|
or key.endswith(os.sep.join(['doc', 'conf.py'])) \
|
|
or key.endswith(os.sep.join(['conventions', 'documentation.rst'])) \
|
|
or key.endswith(os.sep.join(['doc', 'topics', 'releases', '2016.11.2.rst'])) \
|
|
or key.endswith(os.sep.join(['doc', 'topics', 'releases', '2016.11.3.rst'])) \
|
|
or key.endswith(os.sep.join(['doc', 'topics', 'releases', '2016.3.5.rst'])):
|
|
continue
|
|
|
|
# Set up test return dict
|
|
if test_ret.get(key) is None:
|
|
test_ret[key] = [val.strip()]
|
|
else:
|
|
test_ret[key].append(val.strip())
|
|
|
|
# Allow test results to show files with :doc: ref, rather than truncating
|
|
self.maxDiff = None
|
|
|
|
# test_ret should be empty, otherwise there are :doc: references present
|
|
self.assertEqual(test_ret, {})
|