コード例 #1
0
class TestChangeset(unittest.TestCase):
    def setUp(self):
        self.commitid = 'commitid'
        self.date = datetime(2011, 12, 30, 17, 59, 0)
        self.desc = 'description goes here'
        self.changeset = Changeset(self.commitid, self.date, self.desc)

    def test_description_contains_finds_substring(self):
        self.assertTrue(self.changeset.description_contains('rip'))

    def test_description_contains_can_return_false(self):
        self.assertFalse(self.changeset.description_contains('blah'))

    def test_add_bug_fixed_stores_bug(self):
        self.changeset.add_bug_fixed('abc')
        self.assertEqual(1, len(self.changeset.bugs_fixed))
        self.assertEqual('abc', self.changeset.bugs_fixed.pop())

    def test_add_bug_fixed_does_not_store_duplicates(self):
        self.changeset.add_bug_fixed('abc')
        self.changeset.add_bug_fixed('abc')
        self.assertEqual(1, len(self.changeset.bugs_fixed))
        self.assertEqual('abc', self.changeset.bugs_fixed.pop())

    def test_add_bug_fixed_increases_bugs_fixed_count(self):
        self.assertEqual(0, self.changeset.bugs_fixed_count())
        self.changeset.add_bug_fixed('abc')
        self.changeset.add_bug_fixed('def')
        self.assertEqual(2, self.changeset.bugs_fixed_count())

    def test_add_modified_file_stores_file(self):
        self.changeset.add_modified_file('file1')
        self.assertEqual(1, len(self.changeset.modified_files))
        self.assertEqual('file1', list(self.changeset.modified_files)[0])
        self.changeset.add_modified_file('file1')
        self.assertEqual(1, len(self.changeset.modified_files))

    def test_date_ratio(self):
        startdate = datetime(2011, 1, 1, 0, 0, 0)
        today = datetime(2011, 12, 31, 23, 59, 59)
        result = self.changeset._get_date_ratio(startdate, today)
        self.assertAlmostEqual(0.99931127, result, 7)

    def test_score_calculation(self):
        result = self.changeset._calculate_score(0.9, 3)
        self.assertAlmostEqual(0.42555748, result, 7)

    def test_get_score(self):
        startdate = datetime(2011, 1, 1, 0, 0, 0)
        self.changeset._today = datetime(2012, 1, 3, 19, 2, 0)
        result = self.changeset.get_score(startdate)
        self.assertAlmostEqual(0.49335728, result, 7)
コード例 #2
0
    def _create_single_changeset(self, logoutput):
        if logoutput.strip() == '':
            return None

        (commitid, datestr, desc,
         files) = [x.strip() for x in logoutput.split("\n", 3)]

        #remove those awkward prefixed # characters
        desc = desc[1:].strip()
        files = files[1:].strip()

        date = datetime.strptime(datestr, '%Y-%m-%d')

        #create the base changeset
        changeset = Changeset(commitid, date, desc)

        #add the modified files to the changeset
        if files.strip() != '':
            for filename in files.split(' '):
                changeset.add_modified_file(filename)
        return changeset
コード例 #3
0
ファイル: mercurial_repo.py プロジェクト: markdrago/flypaper
    def _create_single_changeset(self, logoutput):
        if logoutput.strip() == '':
            return None

        (commitid, datestr, desc, files) = [
            x.strip() for x in logoutput.split("\n", 3)
        ]

        #remove those awkward prefixed # characters
        desc = desc[1:].strip()
        files = files[1:].strip()

        date = datetime.strptime(datestr, '%Y-%m-%d')

        #create the base changeset
        changeset = Changeset(commitid, date, desc)

        #add the modified files to the changeset
        if files.strip() != '':
            for filename in files.split(' '):
                changeset.add_modified_file(filename)
        return changeset
コード例 #4
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