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()