#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
(c) 2017 - Copyright Red Hat Inc
Authors:
Pierre-Yves Chibon <pingou@pingoured.fr>
Tests for flake8 compliance of the code
"""
from __future__ import unicode_literals, absolute_import
import os
import subprocess
import sys
import unittest
import six
REPO_PATH = os.path.abspath(
os.path.join(os.path.dirname(__file__), '..', 'pagure'))
class TestStyle(unittest.TestCase):
"""This test class contains tests pertaining to code style."""
def test_code_with_flake8(self):
"""Enforce PEP-8 compliance on the codebase.
This test runs flake8 on the code, and will fail if it returns a
non-zero exit code.
"""
# We ignore E712, which disallows non-identity comparisons with True and False
# We ignore W503, which disallows line break before binary operator
flake8_command = [
sys.executable, '-m', 'flake8', '--ignore=E712,W503,E203',
REPO_PATH
]
# check if we have an old flake8 or not
import flake8
flake8_v = flake8.__version__.split('.')
for idx, val in enumerate(flake8_v):
try:
val = int(val)
except ValueError:
pass
flake8_v[idx] = val
old_flake = tuple(flake8_v) < (3, 0)
if old_flake:
raise unittest.SkipTest("Flake8 version too old to be useful")
proc = subprocess.Popen(
flake8_command,
stdout=subprocess.PIPE,
cwd=REPO_PATH,
)
print(proc.communicate())
self.assertEqual(proc.returncode, 0)
@unittest.skipIf(
not (six.PY3 and sys.version_info.minor >=6),
"Black is only available in python 3.6+")
def test_code_with_black(self):
"""Enforce black compliance on the codebase.
This test runs black on the code, and will fail if it returns a
non-zero exit code.
"""
black_command = [
sys.executable, '-m', 'black', '-l', '79', '--check', REPO_PATH
]
proc = subprocess.Popen(
black_command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
cwd=REPO_PATH,
)
stdout, stderr = proc.communicate()
print('stdout: ')
print(stdout.decode('utf-8'))
print('stderr: ')
print(stderr.decode('utf-8'))
self.assertEqual(proc.returncode, 0)
if __name__ == '__main__':
unittest.main(verbosity=2)