Ejemplo n.º 1
0
    def setUp(self):
        self.fp = FlyPaper(None, None, datetime(2011, 1, 1, 0, 0, 0), False,
                           'plain')

        #create a few bugs and changesets
        bug1id = 'bug1'
        self.bug1 = Bug(bug1id)
        self.fp._buglist.add(self.bug1)

        bug2id = 'bug2'
        self.bug2 = Bug(bug2id)
        self.fp._buglist.add(self.bug2)

        #only one bug is part of a changeset
        self.chg1 = Changeset('abc', datetime(2012, 1, 5, 8, 22, 0), bug1id)
        self.fp._changesets.add(self.chg1)
Ejemplo n.º 2
0
class TestFlyPaper(unittest.TestCase):
    def setUp(self):
        self.fp = FlyPaper(None, None, datetime(2011, 1, 1, 0, 0, 0), False,
                           'plain')

        #create a few bugs and changesets
        bug1id = 'bug1'
        self.bug1 = Bug(bug1id)
        self.fp._buglist.add(self.bug1)

        bug2id = 'bug2'
        self.bug2 = Bug(bug2id)
        self.fp._buglist.add(self.bug2)

        #only one bug is part of a changeset
        self.chg1 = Changeset('abc', datetime(2012, 1, 5, 8, 22, 0), bug1id)
        self.fp._changesets.add(self.chg1)

    def test_matching_bugs_with_changesets(self):
        self.fp._match_bugs_with_changesets()

        #verify that only that one bug is linked with a changeset
        self.assertEquals(set([self.chg1]), self.bug1.fixing_changesets)
        self.assertEquals(0, len(self.bug2.fixing_changesets))
        self.assertEquals(set([self.bug1]), self.chg1.bugs_fixed)

    def test_building_buggy_file_list(self):
        self.chg1.add_modified_file('file1')
        self.chg1.bugs_fixed.add(self.bug1)
        self.fp._build_buggy_file_list()
        self.assertEquals(1, len(self.fp._buggy_file_list._filenames))
        self.assertIn('file1', self.fp._buggy_file_list._filenames)

    def test_sorting_buggy_files_by_bugginess(self):
        buggy_file_list = BuggyFileList()
        buggy_file_factory = MockBuggyFileFactory()
        buggy_file_list._file_factory = buggy_file_factory

        #create a few buggy files with different scores
        buggy_file_factory.next_score = 1
        buggy_file_list.add_buggy_file(self.bug1, 'file0')
        buggy_file_factory.next_score = 3
        buggy_file_list.add_buggy_file(self.bug1, 'file1')
        buggy_file_list.add_buggy_file(self.bug2, 'file2')
        buggy_file_factory.next_score = 2
        buggy_file_list.add_buggy_file(self.bug2, 'file3')
        self.fp._buggy_file_list = buggy_file_list

        results = self.fp._get_buggy_files_sorted_by_bugginess()

        self.assertEquals('file1', results[0].filename)
        self.assertEquals('file2', results[1].filename)
        self.assertEquals('file3', results[2].filename)
        self.assertEquals('file0', results[3].filename)

    def test_output_plain_text_without_bugs(self):
        self.fp._showbugs = False
        buggy_files = self.prepare_list_for_output_without_bugs()

        output = self.fp._get_output(buggy_files)
        expected = "3.457 file3\n"
        expected += "2.343 file2\n"
        expected += "1.200 file1\n"
        self.assertEquals(expected, output)

    def test_output_json_without_bugs(self):
        self.fp._showbugs = False
        self.fp._output_format = 'json'
        buggy_files = self.prepare_list_for_output_without_bugs()

        output = self.fp._get_output(buggy_files)
        expected = self.get_expected_json_output(buggy_files, False)
        self.assertEquals(expected, output)

    def test_output_json_with_bugs(self):
        self.fp._showbugs = True
        self.fp._output_format = 'json'
        buggy_files = self.prepare_list_for_output_with_bugs()

        output = self.fp._get_output(buggy_files)
        expected = self.get_expected_json_output(buggy_files, True)
        self.assertEquals(expected, output)

    def get_expected_json_output(self, buggy_files, showbugs):
        expected = {}
        files = []
        for f in buggy_files:
            entry = {}
            entry['filename'] = f.filename
            entry['score'] = f.score
            if showbugs:
                entry['bugs'] = [bug.bugid for bug in f.get_bugs()]
            files.append(entry)
        expected['files'] = files
        return json.dumps(expected, sort_keys=True, indent=2)

    def test_output_plain_text_with_bugs(self):
        self.fp._showbugs = True
        buggy_files = self.prepare_list_for_output_with_bugs()

        output = self.fp._get_output(buggy_files)
        expected = "3.456 file1 bug1,bug2\n"
        expected += "2.345 file2 bug3\n"
        self.assertEquals(expected, output)

    def prepare_list_for_output_without_bugs(self):
        buggy_files = []
        buggy_files.append(MockBuggyFile('file3', 3.45678))
        buggy_files.append(MockBuggyFile('file2', 2.34321))
        buggy_files.append(MockBuggyFile('file1', 1.2))
        return buggy_files

    def prepare_list_for_output_with_bugs(self):
        buggy_files = []
        bf1 = MockBuggyFile('file1', 3.456)
        bf1.add_bug(MockBug('bug1'))
        bf1.add_bug(MockBug('bug2'))
        buggy_files.append(bf1)
        bf2 = MockBuggyFile('file2', 2.345)
        bf2.add_bug(MockBug('bug3'))
        buggy_files.append(bf2)
        return buggy_files