def test_multiple_multi_line_comments(self): """Check multi line long line comments.""" bug_line = 31 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertEqual(len(source_line_comments), 2) expected = [ SourceCodeComment( checkers={'my.checker_1'}, message='long intentional bug comment', status='intentional', line='// codechecker_intentional [ my.checker_1 ] ' 'long intentional\n // bug comment\n'), SourceCodeComment( checkers={'my.checker_2'}, message='long confirmed bug comment', status='confirmed', line='// codechecker_confirmed [ my.checker_2 ] ' 'long confirmed\n // bug comment\n') ] self.assertEqual(expected[0], source_line_comments[0]) self.assertEqual(expected[1], source_line_comments[1])
def test_cstyle_multi_comment_multi_line_long(self): """ Multi line C style comment with multiple review status comment. /* codechecker_false_positive [ my.checker_2, my.checker_1 ] comment which is long codechecker_intentional [ my.checker_1 ] intentional comment long again */ """ bug_line = 60 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_3, bug_line) self.assertEqual(len(source_line_comments), 2) expected = [ SourceCodeComment(checkers={'my.checker_1'}, message='intentional comment long again', status='intentional', line='codechecker_intentional [ my.checker_1 ] ' 'intentional comment\n long\n again */\n'), SourceCodeComment(checkers={'my.checker_1', 'my.checker_2'}, message='comment which is long', status='false_positive', line='/* codechecker_false_positive [ ' 'my.checker_2, my.checker_1 ] comment\n ' 'which\n is\n long\n') ] self.assertEqual(expected[0], source_line_comments[0]) self.assertEqual(expected[1], source_line_comments[1]) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.checker_1') self.assertEqual(len(current_line_comments), 2) self.assertEqual(current_line_comments[0].message, expected[0].message) self.assertEqual(current_line_comments[0].status, expected[0].status) self.assertEqual(current_line_comments[1].message, expected[1].message) self.assertEqual(current_line_comments[1].status, expected[1].status) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.checker_2') self.assertEqual(len(current_line_comments), 1) self.assertEqual(current_line_comments[0].message, expected[1].message) self.assertEqual(current_line_comments[0].status, expected[1].status) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.dummy') self.assertEqual(len(current_line_comments), 0)
def test_multiple_all_comments(self): """Check multiple comment.""" bug_line = 37 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertEqual(len(source_line_comments), 2) expected = [ SourceCodeComment( checkers={'my.checker_1'}, message='intentional comment', status='intentional', line='// codechecker_intentional [ my.checker_1 ] ' 'intentional comment\n'), SourceCodeComment(checkers={'all'}, message='some comment', status='false_positive', line='// codechecker_false_positive [ all ] ' 'some comment\n') ] self.assertEqual(expected[0], source_line_comments[0]) self.assertEqual(expected[1], source_line_comments[1]) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.checker_1') self.assertEqual(len(current_line_comments), 2) self.assertEqual(current_line_comments[0].message, expected[0].message) self.assertEqual(current_line_comments[0].status, expected[0].status) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, '') self.assertEqual(len(current_line_comments), 1) self.assertEqual(current_line_comments[0].message, expected[1].message) self.assertEqual(current_line_comments[0].status, expected[1].status) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.dummy') self.assertEqual(len(current_line_comments), 1) self.assertEqual(len(current_line_comments), 1) self.assertEqual(current_line_comments[0].message, expected[1].message) self.assertEqual(current_line_comments[0].status, expected[1].status)
def test_cstyle_comment_multi_line_mismatch(self): """ Multi line C style comment start '/*' is in a different line from the codechecker review status comment. /* codechecker_suppress [ my_checker_1 ] multi line comment again */ """ bug_line = 108 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='multi line comment again', status='false_positive', line=' codechecker_suppress [ my_checker_1 ]\n ' 'multi line\n comment\n again\n */\n') self.assertEqual(expected, source_line_comments[0])
def test_cstyle_comment_multi_star(self): """ Multi line C style comment. /* codechecker_suppress [ my_checker_1 ] * multi line * comment * again */ """ bug_line = 98 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='multi line comment again', status='false_positive', line="/* codechecker_suppress [ my_checker_1 ]\n * " "multi line\n * comment\n * again\n */\n") self.assertEqual(expected, source_line_comments[0])
def test_cstyle_comment_multi_nomsg(self): """ Multi line C style comment. /* codechecker_suppress [ my_checker_1 ] */ """ bug_line = 89 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_1, bug_line) for line in source_line_comments: print(line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='WARNING! source code comment is missing', status='false_positive', line='/* codechecker_suppress [ my_checker_1 ]\n */\n') self.assertEqual(expected, source_line_comments[0])
def test_cstyle_comment_multi_line(self): """ Multi line C style comment. /* codechecker_suppress [ my_checker_1 ] some longer comment */ """ bug_line = 83 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='some longer comment', status='false_positive', line='/* codechecker_suppress [ my_checker_1 ]\n ' 'some longer\n comment */\n') self.assertEqual(expected, source_line_comments[0])
def test_cstyle_comment(self): """ C style comment in one line. /* codechecker_suppress [ my_checker_1 ] suppress comment */ """ bug_line = 76 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_1, bug_line) for line in source_line_comments: print(line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='suppress comment', status='false_positive', line='/* codechecker_suppress [ my_checker_1 ] ' 'suppress comment */\n') self.assertEqual(expected, source_line_comments[0])
def test_multiple_checker_name_comments(self): """ Check multiple comment where same checker name are given for multiple source code comment. """ bug_line = 43 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertTrue(res) source_line_comments = sc_handler.get_source_line_comments( self.__tmp_srcfile_3, bug_line) self.assertEqual(len(source_line_comments), 2) expected = [ SourceCodeComment( checkers={'my.checker_1'}, message='intentional comment', status='intentional', line='// codechecker_intentional [ my.checker_1 ] ' 'intentional comment\n'), SourceCodeComment(checkers={'my.checker_2', 'my.checker_1'}, message='some comment', status='false_positive', line='// codechecker_false_positive [ ' 'my.checker_2, my.checker_1 ] some comment\n') ] self.assertEqual(expected[0], source_line_comments[0]) self.assertEqual(expected[1], source_line_comments[1]) current_line_comments = sc_handler.filter_source_line_comments( self.__tmp_srcfile_3, bug_line, 'my.checker_1') self.assertEqual(len(current_line_comments), 2)
def test_no_src_comment_comment(self): """There is no source comment above the bug line.""" bug_line = 16 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'all'}, message='some comment', status='false_positive', line='// codechecker_suppress [all] some comment\n') self.assertEqual(expected, source_line_comments[0])
def test_confirmed_comment(self): """Check Confirmed comment.""" bug_line = 17 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_3, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'all'}, message='some comment', status='confirmed', line='// codechecker_confirmed [ all ] some comment\n') self.assertEqual(expected, source_line_comments[0])
def test_no_fancy_comment(self): """Check no fancy comment.""" bug_line = 70 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message='WARNING! source code comment is missing', status='false_positive', line='// codechecker_suppress [ my_checker_1 ]\n') self.assertEqual(expected, source_line_comments[0])
def test_fancy_comment_characters(self): """Check fancy comment.""" bug_line = 64 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my_checker_1'}, message="áúőóüöáé [▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬]", status='false_positive', line='// codechecker_suppress [ my_checker_1 ]\n // ' 'áúőóüöáé [▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬]\n') self.assertEqual(expected, source_line_comments[0])
def test_comment_characters(self): """Check for different special comment characters.""" bug_line = 57 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my.checker_1', 'my.checker_2'}, message="i/';0 (*&^%$#@!)", status='false_positive', line="// codechecker_suppress [my.checker_1, " "my.checker_2]\n // i/';0 (*&^%$#@!)\n") self.assertEqual(expected, source_line_comments[0])
def test_multi_liner_all_2(self): """There is source code comment above the bug line.""" bug_line = 36 sc_handler = SourceCodeCommentHandler() res = sc_handler.has_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertTrue(res) source_line_comments = \ sc_handler.get_source_line_comments(self.__tmp_srcfile_1, bug_line) self.assertEqual(len(source_line_comments), 1) expected = SourceCodeComment( checkers={'my.checker_1', 'my.checker_2'}, message='some really long comment', status='false_positive', line='// codechecker_suppress [my.checker_1 ' 'my.checker_2] some really\n // long comment\n') self.assertEqual(expected, source_line_comments[0])