def test_spec_ret_val_coll(self):
        """
        Parse the output of the special return value collector checker.
        """
        test_input = [
            "/.../x.c:551:12: warning:"
            " Special Return Value:/.../x.c:551:12,parsedate,0,0",
            "/.../x.c:551:12: warning:"
            " Special Return Value:/.../x.c:551:12,parsedate,0,0",
            "/.../x.c:551:12: warning:"
            " Special Return Value:/.../x.c:551:12,parsedate,0,0",
            "/.../x.c:551:12: warning:"
            " Special Return Value:/.../x.c:551:12,parsedate,0,0"
        ]

        special_ret_collector = \
            statistics_collector.SpecialReturnValueCollector(10, 0.85)

        for l in test_input:
            special_ret_collector.process_line(l)

        self.assertEqual({'parsedate': 4}, special_ret_collector.total())
        self.assertEqual({'parsedate': 0}, special_ret_collector.nof_null())
        self.assertEqual({'parsedate': 0},
                         special_ret_collector.nof_negative())
    def test_spec_ret_val_coll_neg_filter(self):
        """
        Parse the output of the special return value collector checker
        with more various return value output
        (number of null return, number of negative returns)
        with filtering based on the threshold.
        """

        test_ret_neg = ["/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,0",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,0,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:551:12: warning:"
                        " Special Return Value:/.../x.c:551:12,parsedate,1,1",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        "/.../x.c:552:14: warning:"
                        " Special Return Value:/.../x.c:551:12,myfunc,0,0",
                        ]

        special_ret_collector = \
            statistics_collector.SpecialReturnValueCollector()

        for l in test_ret_neg:
            special_ret_collector.process_line(l)

        self.assertEqual({'parsedate': 10, 'myfunc': 6},
                         special_ret_collector.total())
        self.assertEqual({'parsedate': 9, 'myfunc': 0},
                         special_ret_collector.nof_null())
        self.assertEqual({'parsedate': 9, 'myfunc': 0},
                         special_ret_collector.nof_negative())
        self.assertEqual((['parsedate'], ['parsedate']),
                         special_ret_collector.filter_stats())