/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 breezy/tests/test_plugins.py

  • Committer: Breezy landing bot
  • Author(s): Jelmer Vernooij
  • Date: 2019-01-25 03:52:39 UTC
  • mfrom: (7236.3.7 entrypoints)
  • Revision ID: breezy.the.bot@gmail.com-20190125035239-cgyis1wo08uh09sx
Support loading breezy plugins from setuptools entrypoints.

Merged from https://code.launchpad.net/~jelmer/brz/entrypoints/+merge/361986

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
    plugin,
30
30
    tests,
31
31
    )
 
32
from ..tests.features import pkg_resources_feature
32
33
from ..sixish import (
33
34
    StringIO,
34
35
    viewkeys,
593
594
    user = "USER"
594
595
    core = "CORE"
595
596
    site = "SITE"
 
597
    entrypoints = "ENTRYPOINTS"
596
598
 
597
599
    def check_path(self, expected_dirs, setting_dirs):
598
600
        if setting_dirs is None:
604
606
        self.assertEqual(expected_dirs, actual)
605
607
 
606
608
    def test_default(self):
607
 
        self.check_path([self.user, self.core, self.site],
 
609
        self.check_path([self.user, self.core, self.entrypoints, self.site],
608
610
                        None)
609
611
 
610
612
    def test_adhoc_policy(self):
611
 
        self.check_path([self.user, self.core, self.site],
 
613
        self.check_path([self.user, self.core, self.site, self.entrypoints],
612
614
                        ['+user', '+core', '+site'])
613
615
 
614
616
    def test_fallback_policy(self):
615
 
        self.check_path([self.core, self.site, self.user],
 
617
        self.check_path([self.core, self.site, self.user, self.entrypoints],
616
618
                        ['+core', '+site', '+user'])
617
619
 
618
620
    def test_override_policy(self):
619
 
        self.check_path([self.user, self.site, self.core],
 
621
        self.check_path([self.user, self.site, self.core, self.entrypoints],
620
622
                        ['+user', '+site', '+core'])
621
623
 
622
624
    def test_disable_user(self):
623
 
        self.check_path([self.core, self.site], ['-user'])
 
625
        self.check_path([self.core, self.entrypoints, self.site], ['-user'])
624
626
 
625
627
    def test_disable_user_twice(self):
626
628
        # Ensures multiple removals don't left cruft
627
 
        self.check_path([self.core, self.site], ['-user', '-user'])
 
629
        self.check_path([self.core, self.entrypoints, self.site], ['-user', '-user'])
628
630
 
629
631
    def test_duplicates_are_removed(self):
630
 
        self.check_path([self.user, self.core, self.site],
 
632
        self.check_path([self.user, self.core, self.entrypoints, self.site],
631
633
                        ['+user', '+user'])
632
634
        # And only the first reference is kept (since the later references will
633
635
        # only produce '<plugin> already loaded' mutters)
634
 
        self.check_path([self.user, self.core, self.site],
 
636
        self.check_path([self.user, self.core, self.site, self.entrypoints],
635
637
                        ['+user', '+user', '+core',
636
638
                         '+user', '+site', '+site',
637
639
                         '+core'])
638
640
 
639
641
    def test_disable_overrides_enable(self):
640
 
        self.check_path([self.core, self.site], ['-user', '+user'])
 
642
        self.check_path([self.core, self.entrypoints, self.site], ['-user', '+user'])
641
643
 
642
644
    def test_disable_core(self):
643
 
        self.check_path([self.site], ['-core'])
644
 
        self.check_path([self.user, self.site], ['+user', '-core'])
 
645
        self.check_path([self.entrypoints, self.site], ['-core'])
 
646
        self.check_path([self.user, self.entrypoints, self.site], ['+user', '-core'])
645
647
 
646
648
    def test_disable_site(self):
647
 
        self.check_path([self.core], ['-site'])
648
 
        self.check_path([self.user, self.core], ['-site', '+user'])
 
649
        self.check_path([self.core, self.entrypoints], ['-site'])
 
650
        self.check_path([self.user, self.core, self.entrypoints], ['-site', '+user'])
649
651
 
650
652
    def test_override_site(self):
651
 
        self.check_path(['mysite', self.user, self.core],
 
653
        self.check_path(['mysite', self.user, self.core, self.entrypoints],
652
654
                        ['mysite', '-site', '+user'])
653
 
        self.check_path(['mysite', self.core],
 
655
        self.check_path(['mysite', self.core, self.entrypoints],
654
656
                        ['mysite', '-site'])
655
657
 
656
658
    def test_override_core(self):
657
 
        self.check_path(['mycore', self.user, self.site],
 
659
        self.check_path(['mycore', self.user, self.site, self.entrypoints],
658
660
                        ['mycore', '-core', '+user', '+site'])
659
 
        self.check_path(['mycore', self.site],
 
661
        self.check_path(['mycore', self.entrypoints, self.site],
660
662
                        ['mycore', '-core'])
661
663
 
662
664
    def test_my_plugin_only(self):
663
 
        self.check_path(['myplugin'], ['myplugin', '-user', '-core', '-site'])
 
665
        self.check_path(
 
666
            ['myplugin'],
 
667
            ['myplugin', '-user', '-core', '-site', '-entrypoints'])
664
668
 
665
669
    def test_my_plugin_first(self):
666
 
        self.check_path(['myplugin', self.core, self.site, self.user],
 
670
        self.check_path(['myplugin', self.core, self.site, self.user, self.entrypoints],
667
671
                        ['myplugin', '+core', '+site', '+user'])
668
672
 
669
673
    def test_bogus_references(self):
670
 
        self.check_path(['+foo', '-bar', self.core, self.site],
 
674
        self.check_path(['+foo', '-bar', self.core, self.entrypoints, self.site],
671
675
                        ['+foo', '-bar'])
672
676
 
673
677
 
891
895
  Hi there
892
896
 
893
897
""", ''.join(plugin.describe_plugins(state=self)))
 
898
 
 
899
 
 
900
class DummyPlugin(object):
 
901
    """Plugin."""
 
902
 
 
903
 
 
904
class TestLoadEnvPlugin(BaseTestPlugins):
 
905
 
 
906
    _test_needs_features = [pkg_resources_feature]
 
907
 
 
908
    def setup_plugin(self, source=""):
 
909
        # This test tests a new plugin appears in breezy.plugin.plugins().
 
910
        # check the plugin is not loaded already
 
911
        self.assertPluginUnknown('plugin')
 
912
        # write a plugin that _cannot_ fail to load.
 
913
        import pkg_resources
 
914
        d = pkg_resources.Distribution(__file__)
 
915
        ep = pkg_resources.EntryPoint.parse(
 
916
            'plugin = ' + __name__ + ':DummyPlugin', dist=d)
 
917
        d._ep_map = {'breezy.plugin': {'plugin': ep}}
 
918
        pkg_resources.working_set.add(d, 'plugin', replace=True)
 
919
        eps = list(pkg_resources.iter_entry_points('breezy.plugin'))
 
920
        self.assertEqual(['plugin'], [ep.name for ep in eps])
 
921
        self.load_with_paths(['.'])
 
922
        self.addCleanup(d._ep_map.clear)
 
923
 
 
924
    def test_plugin_loaded(self):
 
925
        self.assertPluginUnknown('plugin')
 
926
        self.setup_plugin()
 
927
        p = self.plugins['plugin']
 
928
        self.assertIsInstance(p, breezy.plugin.PlugIn)
 
929
        self.assertIs(p.module, sys.modules[self.module_prefix + 'plugin'])
 
930
 
 
931
    def test_plugin_loaded_disabled(self):
 
932
        self.assertPluginUnknown('plugin')
 
933
        self.overrideEnv('BRZ_DISABLE_PLUGINS', 'plugin')
 
934
        self.setup_plugin()
 
935
        self.assertNotIn('plugin', self.plugins)