def test_single(self):
     tree = DataTree(dict)
     tree['single/leaf'].update({'class': 'good'})
     view = DiffView()
     self.assertListEqual(
         view.tree_data(tree),
         [
             ('single/leaf', {'children': [], 'value': {'class': 'good'}}),
         ])
 def test_two_distinct(self):
     tree = DataTree(dict)
     tree['single/leaf'].update({'class': 'good'})
     tree['other/trunk'].update({'class': 'better'})
     view = DiffView()
     self.assertListEqual(
         view.tree_data(tree),
         [
             ('other/trunk', {'children': [],
                              'value': {'class': 'better'}}),
             ('single/leaf', {'children': [], 'value': {'class': 'good'}}),
         ])
    def test_repo_interactions(self):
        '''Let's just use a single test method for all our hg interactions,
        to reuse the hg repo fixture.
        '''
        dbrepo = self.dbrepo(changesets_from=hglib.open(self.repo))
        view = DiffView()
        view.getrepo(dbrepo.name)
        # add
        paths = view.paths4revs('0', '1')
        self.assertListEqual(
            paths,
            [('f.ftl', 'added')])
        self.assertDictEqual(view.moved, {})
        self.assertDictEqual(view.copied, {})
        # modified
        paths = view.paths4revs('1', '2')
        self.assertListEqual(
            paths,
            [('f.ftl', 'changed')])
        self.assertDictEqual(view.moved, {})
        self.assertDictEqual(view.copied, {})
        # copy
        paths = view.paths4revs('2', '3')
        self.assertListEqual(
            paths,
            [('copied.ftl', 'copied')])
        self.assertDictEqual(view.moved, {})
        self.assertDictEqual(
            view.copied,
            {'copied.ftl': 'f.ftl'})
        # move
        paths = view.paths4revs('3', '4')
        self.assertListEqual(
            paths,
            [('moved.ftl', 'moved')])
        self.assertDictEqual(
            view.moved,
            {'moved.ftl': 'f.ftl'})
        self.assertDictEqual(view.copied, {})
        # remove
        paths = view.paths4revs('4', '5')
        self.assertListEqual(
            paths,
            [('copied.ftl', 'removed')])
        self.assertDictEqual(view.moved, {})
        self.assertDictEqual(view.copied, {})

        # test tip and default (tip is default, not tip, really)
        self.assertEqual(view.real_rev('5'), view.real_rev('tip'))
        self.assertEqual(view.real_rev('5'), view.real_rev('default'))

        # test fork, just one of the code paths
        fork = self.dbrepo(name='fork')
        fork.fork_of = dbrepo
        fork.save()
        view.getrepo(fork.name)
        paths = view.paths4revs('0', '1')
        self.assertListEqual(
            paths,
            [('f.ftl', 'added')])
        self.assertDictEqual(view.moved, {})
        self.assertDictEqual(view.copied, {})

        # test revision lookup errors
        with self.assertRaises(BadRevision) as bad_rev_cm:
            view.paths4revs('iiii', '0')
        self.assertEqual(
            six.text_type(bad_rev_cm.exception),
            "Unrecognized 'from' parameter")
        with self.assertRaises(BadRevision) as bad_rev_cm:
            view.paths4revs('0', 'jjjj')
        self.assertEqual(
            six.text_type(bad_rev_cm.exception),
            "Unrecognized 'to' parameter")

        # test content retrieval from hg
        self.assertEqual(
            view.content('f.ftl', '1'),
            b'message = text\n')
        self.assertEqual(
            view.content('f.ftl', '2'),
            b'message = othertext\n')