mirror of
https://github.com/adrienverge/yamllint.git
synced 2024-11-22 07:36:25 -06:00
327f92e472
- Add a `temp_workspace` context manager to simplify writing new tests. - Add `# pragma: no cover` to unit test code paths used for skipping tests. These code paths are only covered when tests are skipped. That makes it impractical to reach full code coverage on the unit test code. Having full coverage of unit tests is helpful for identifying unused tests. - Test the `octal-values` rule with a custom tag. - Test the cli `-d` option with the `default` config. - Test support for the `XDG_CONFIG_HOME` env var. - Test warning message output. - Test support for `.yamllint.yml` config files. - Test support for `.yamllint.yaml` config files. - Test error handling of a rule with a non-enable|disable|dict value. - Test error handling of `ignore` with a non-pattern value. - Test error handling of a rule `ignore` with a non-pattern value. - Test error handling of `locale` with a non-string value. - Test error handling of `yaml-files` with a non-list value. - Test extending config containing `ignore`. - Test `LintProblem.__repr__` without a rule. - Test `LintProblem.__repr__` with a rule.
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
# Copyright (C) 2016 Adrien Vergé
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
import contextlib
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import unittest
|
|
|
|
import yaml
|
|
|
|
from yamllint.config import YamlLintConfig
|
|
from yamllint import linter
|
|
|
|
|
|
class RuleTestCase(unittest.TestCase):
|
|
def build_fake_config(self, conf):
|
|
if conf is None:
|
|
conf = {}
|
|
else:
|
|
conf = yaml.safe_load(conf)
|
|
conf = {'extends': 'default',
|
|
'rules': conf}
|
|
return YamlLintConfig(yaml.safe_dump(conf))
|
|
|
|
def check(self, source, conf, **kwargs):
|
|
expected_problems = []
|
|
for key in kwargs:
|
|
assert key.startswith('problem')
|
|
if len(kwargs[key]) > 2:
|
|
if kwargs[key][2] == 'syntax':
|
|
rule_id = None
|
|
else:
|
|
rule_id = kwargs[key][2]
|
|
else:
|
|
rule_id = self.rule_id
|
|
expected_problems.append(linter.LintProblem(
|
|
kwargs[key][0], kwargs[key][1], rule=rule_id))
|
|
expected_problems.sort()
|
|
|
|
real_problems = list(linter.run(source, self.build_fake_config(conf)))
|
|
self.assertEqual(real_problems, expected_problems)
|
|
|
|
|
|
def build_temp_workspace(files):
|
|
tempdir = tempfile.mkdtemp(prefix='yamllint-tests-')
|
|
|
|
for path, content in files.items():
|
|
path = os.path.join(tempdir, path).encode('utf-8')
|
|
if not os.path.exists(os.path.dirname(path)):
|
|
os.makedirs(os.path.dirname(path))
|
|
|
|
if type(content) is list:
|
|
os.mkdir(path)
|
|
else:
|
|
mode = 'wb' if isinstance(content, bytes) else 'w'
|
|
with open(path, mode) as f:
|
|
f.write(content)
|
|
|
|
return tempdir
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def temp_workspace(files):
|
|
"""Provide a temporary workspace that is automatically cleaned up."""
|
|
backup_wd = os.getcwd()
|
|
wd = build_temp_workspace(files)
|
|
|
|
try:
|
|
os.chdir(wd)
|
|
yield
|
|
finally:
|
|
os.chdir(backup_wd)
|
|
shutil.rmtree(wd)
|