/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_merge.py

  • Committer: Martin Pool
  • Date: 2010-02-09 19:04:02 UTC
  • mfrom: (5010 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5019.
  • Revision ID: mbp@canonical.com-20100209190402-2xbzrchmb4dfi2j7
Resolve conflicts with trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007 Canonical Ltd
 
1
# Copyright (C) 2005-2010 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
33
33
from bzrlib.errors import UnrelatedBranches, NoCommits
34
34
from bzrlib.merge import transform_tree, merge_inner, _PlanMerge
35
35
from bzrlib.osutils import pathjoin, file_kind
36
 
from bzrlib.tests import TestCaseWithTransport, TestCaseWithMemoryTransport
 
36
from bzrlib.tests import (
 
37
    TestCaseWithMemoryTransport,
 
38
    TestCaseWithTransport,
 
39
    test_merge_core,
 
40
    )
37
41
from bzrlib.workingtree import WorkingTree
38
42
 
39
43
 
2826
2830
            'bval', ['lca1val', 'lca2val', 'lca2val'], 'oval', 'tval')
2827
2831
        self.assertLCAMultiWay('conflict',
2828
2832
            'bval', ['lca1val', 'lca2val', 'lca3val'], 'oval', 'tval')
 
2833
 
 
2834
 
 
2835
class TestConfigurableFileMerger(tests.TestCaseWithTransport):
 
2836
 
 
2837
    def setUp(self):
 
2838
        super(TestConfigurableFileMerger, self).setUp()
 
2839
        self.calls = []
 
2840
 
 
2841
    def get_merger_factory(self):
 
2842
        # Allows  the inner methods to access the test attributes
 
2843
        test = self
 
2844
 
 
2845
        class FooMerger(_mod_merge.ConfigurableFileMerger):
 
2846
            name_prefix = "foo"
 
2847
            default_files = ['bar']
 
2848
 
 
2849
            def merge_text(self, params):
 
2850
                test.calls.append('merge_text')
 
2851
                return ('not_applicable', None)
 
2852
 
 
2853
        def factory(merger):
 
2854
            result = FooMerger(merger)
 
2855
            # Make sure we start with a clean slate
 
2856
            self.assertEqual(None, result.affected_files)
 
2857
            # Track the original merger
 
2858
            self.merger = result
 
2859
            return result
 
2860
 
 
2861
        return factory
 
2862
 
 
2863
    def _install_hook(self, factory):
 
2864
        _mod_merge.Merger.hooks.install_named_hook('merge_file_content',
 
2865
                                                   factory, 'test factory')
 
2866
 
 
2867
    def make_builder(self):
 
2868
        builder = test_merge_core.MergeBuilder(self.test_base_dir)
 
2869
        self.addCleanup(builder.cleanup)
 
2870
        return builder
 
2871
 
 
2872
    def make_text_conflict(self, file_name='bar'):
 
2873
        factory = self.get_merger_factory()
 
2874
        self._install_hook(factory)
 
2875
        builder = self.make_builder()
 
2876
        builder.add_file('bar-id', builder.tree_root, file_name, 'text1', True)
 
2877
        builder.change_contents('bar-id', other='text4', this='text3')
 
2878
        return builder
 
2879
 
 
2880
    def make_kind_change(self):
 
2881
        factory = self.get_merger_factory()
 
2882
        self._install_hook(factory)
 
2883
        builder = self.make_builder()
 
2884
        builder.add_file('bar-id', builder.tree_root, 'bar', 'text1', True,
 
2885
                         this=False)
 
2886
        builder.add_dir('bar-dir', builder.tree_root, 'bar-id',
 
2887
                        base=False, other=False)
 
2888
        return builder
 
2889
 
 
2890
    def test_affected_files_cached(self):
 
2891
        """Ensures that the config variable is cached"""
 
2892
        builder = self.make_text_conflict()
 
2893
        conflicts = builder.merge()
 
2894
        # The hook should set the variable
 
2895
        self.assertEqual(['bar'], self.merger.affected_files)
 
2896
        self.assertEqual(1, len(conflicts))
 
2897
 
 
2898
    def test_hook_called_for_text_conflicts(self):
 
2899
        builder = self.make_text_conflict()
 
2900
        conflicts = builder.merge()
 
2901
        # The hook should call the merge_text() method
 
2902
        self.assertEqual(['merge_text'], self.calls)
 
2903
 
 
2904
    def test_hook_not_called_for_kind_change(self):
 
2905
        builder = self.make_kind_change()
 
2906
        conflicts = builder.merge()
 
2907
        # The hook should not call the merge_text() method
 
2908
        self.assertEqual([], self.calls)
 
2909
 
 
2910
    def test_hook_not_called_for_other_files(self):
 
2911
        builder = self.make_text_conflict('foobar')
 
2912
        conflicts = builder.merge()
 
2913
        # The hook should not call the merge_text() method
 
2914
        self.assertEqual([], self.calls)