blob: 4cd48cc415e44d191f23065163cf985a9c9b3aad [file] [log] [blame]
import sys
from os.path import join, dirname, abspath
import unittest
import six
from pylint.checkers import similar
SIMILAR1 = join(dirname(abspath(__file__)), 'input', 'similar1')
SIMILAR2 = join(dirname(abspath(__file__)), 'input', 'similar2')
class SimilarTC(unittest.TestCase):
"""test the similar command line utility"""
def test_ignore_comments(self):
sys.stdout = six.StringIO()
try:
similar.Run(['--ignore-comments', SIMILAR1, SIMILAR2])
except SystemExit as ex:
self.assertEqual(ex.code, 0)
output = sys.stdout.getvalue()
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
self.assertMultiLineEqual(output.strip(), ("""
10 similar lines in 2 files
==%s:0
==%s:0
import one
from two import two
three
four
five
six
seven
eight
nine
''' ten
TOTAL lines=44 duplicates=10 percent=22.73
""" % (SIMILAR1, SIMILAR2)).strip())
def test_ignore_docsrings(self):
sys.stdout = six.StringIO()
try:
similar.Run(['--ignore-docstrings', SIMILAR1, SIMILAR2])
except SystemExit as ex:
self.assertEqual(ex.code, 0)
output = sys.stdout.getvalue()
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
self.assertMultiLineEqual(output.strip(), ("""
8 similar lines in 2 files
==%s:6
==%s:6
seven
eight
nine
''' ten
ELEVEN
twelve '''
thirteen
fourteen
5 similar lines in 2 files
==%s:0
==%s:0
import one
from two import two
three
four
five
TOTAL lines=44 duplicates=13 percent=29.55
""" % ((SIMILAR1, SIMILAR2) * 2)).strip())
def test_ignore_imports(self):
sys.stdout = six.StringIO()
try:
similar.Run(['--ignore-imports', SIMILAR1, SIMILAR2])
except SystemExit as ex:
self.assertEqual(ex.code, 0)
output = sys.stdout.getvalue()
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
self.assertMultiLineEqual(output.strip(), """
TOTAL lines=44 duplicates=0 percent=0.00
""".strip())
def test_ignore_nothing(self):
sys.stdout = six.StringIO()
try:
similar.Run([SIMILAR1, SIMILAR2])
except SystemExit as ex:
self.assertEqual(ex.code, 0)
output = sys.stdout.getvalue()
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
self.assertMultiLineEqual(output.strip(), ("""
5 similar lines in 2 files
==%s:0
==%s:0
import one
from two import two
three
four
five
TOTAL lines=44 duplicates=5 percent=11.36
""" % (SIMILAR1, SIMILAR2)).strip())
def test_help(self):
sys.stdout = six.StringIO()
try:
similar.Run(['--help'])
except SystemExit as ex:
self.assertEqual(ex.code, 0)
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
def test_no_args(self):
sys.stdout = six.StringIO()
try:
similar.Run([])
except SystemExit as ex:
self.assertEqual(ex.code, 1)
else:
self.fail('not system exit')
finally:
sys.stdout = sys.__stdout__
if __name__ == '__main__':
unittest.main()