示例#1
0
        public void Should_replace_or_prepend_specified_type_with_instance_plugin(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool dispose,
            [Values(true, false)] bool when)
        {
            var instance3 = new Plugin3();

            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin1>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create(new Plugin2(), x => false));

            RunInScope(when, (dsl, p) => dsl.Replace <Plugin2>().WithOrPrepend(instance3, p, dispose, @default));

            _plugins.Count().ShouldEqual(2);
            _plugins.First().Type.ShouldEqual(typeof(Plugin1));

            var replacement = _plugins.Second();

            replacement.Type.ShouldEqual(typeof(Plugin3));
            replacement.Instance.ShouldEqual(instance3);
            replacement.Dispose.ShouldEqual(dispose);
            replacement.AppliesTo.ShouldEqual(_predicate);

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create(instance3, x => false))
            .ShouldEqual(@default);
        }
示例#2
0
        public void Should_prepend_type_plugin_if_it_cannot_prepend_before_another(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool when)
        {
            var instance1 = new Plugin1();

            _pluginsDsl.Append(instance1);

            RunInScope(when, (dsl, p) => dsl
                       .Prepend <Plugin2>(p, @default)
                       .BeforeOrPrepend <Plugin3>());

            _plugins.Count().ShouldEqual(2);

            var prepended = _plugins.First();

            prepended.Type.ShouldEqual(typeof(Plugin2));
            prepended.Singleton.ShouldBeTrue();
            prepended.AppliesTo.ShouldEqual(_predicate);

            _plugins.Second().Instance.ShouldEqual(instance1);

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create <Plugin2>(x => false))
            .ShouldEqual(@default);
        }
示例#3
0
        public void Should_prepend_instance_plugin_if_it_cannot_prepend_before_another(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool dispose,
            [Values(true, false)] bool when)
        {
            var instance2 = new Plugin2();

            _pluginsDsl.Append <Plugin1>();

            RunInScope(when, (dsl, p) => dsl
                       .Prepend(instance2, p, dispose, @default)
                       .BeforeOrPrepend <Plugin3>());

            _plugins.Count().ShouldEqual(2);

            var prepended = _plugins.First();

            prepended.Type.ShouldEqual(typeof(Plugin2));
            prepended.Instance.ShouldEqual(instance2);
            prepended.Dispose.ShouldEqual(dispose);
            prepended.AppliesTo.ShouldEqual(_predicate);

            _plugins.Second().Type.ShouldEqual(typeof(Plugin1));

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create(instance2, x => false))
            .ShouldEqual(@default);
        }
        public void Should_set_applies_to_on_instance_pugin()
        {
            bool Predicate(Context x) => false;

            var plugin = ConditionalPlugin <IPluginType, Context>
                         .Create(new Plugin(), Predicate);

            plugin.AppliesTo.ShouldEqual(Predicate);
        }
示例#5
0
        public void Should_clear_plugins()
        {
            _plugins.Append(ConditionalPlugin <IPluginType, Context>
                            .Create <Plugin1>(x => false));

            _plugins.Count().ShouldEqual(1);

            _pluginsDsl.Clear();

            _plugins.ShouldBeEmpty();
        }
示例#6
0
        public void Should_removed_specified_type()
        {
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin1>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create(new Plugin2(), x => false));

            _plugins.Count().ShouldEqual(3);

            _pluginsDsl.Remove <Plugin2>();

            _plugins.Count().ShouldEqual(1);
            _plugins.First().Type.ShouldEqual(typeof(Plugin1));
        }
示例#7
0
        public void Should_clear_plugins_except_specified()
        {
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin1>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create(new Plugin1(), x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false));

            _plugins.Count().ShouldEqual(3);

            _pluginsDsl.ClearExcept <Plugin2>();

            _plugins.Count().ShouldEqual(1);
            _plugins.First().Type.ShouldEqual(typeof(Plugin2));
        }
示例#8
0
        public void Should_return_empty_list_if_no_instances_appy_to_plugin_context_and_no_default_is_specified()
        {
            var plugin = new ConditionalPlugin {
                DoesApply = false
            };

            var instances = new IConditionalPluginType[] { plugin };

            var plugins = new ConditionalPlugins <IConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ConditionalPlugin>());

            var applies = plugins.ThatAppliesOrDefault(instances, new PluginContext());

            applies.ShouldBeEmpty();
        }
        public void Should_clone()
        {
            var plugin = ConditionalPlugin <IPluginType, Context>
                         .Create <Plugin>(x => false, true);

            var clone = plugin.Clone();

            (clone == plugin).ShouldBeFalse();
            clone.ShouldEqual(plugin);

            clone.Singleton.ShouldEqual(plugin.Singleton);
            clone.HasInstance.ShouldEqual(plugin.HasInstance);
            clone.Type.ShouldEqual(plugin.Type);
            clone.Instance.ShouldEqual(plugin.Instance);
            clone.Dispose.ShouldEqual(plugin.Dispose);
            clone.AppliesTo.ShouldEqual(plugin.AppliesTo);
        }
示例#10
0
        public void Should_not_return_instances_that_dont_apply_to_plugin_context(
            [Values(true, false)] bool applies)
        {
            var plugin = new ConditionalPlugin {
                DoesApply = applies
            };

            var instances = new IConditionalPluginType[] { plugin };

            var plugins = new ConditionalPlugins <IConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ConditionalPlugin>());

            var apply = plugins.ThatApply(instances, new PluginContext()).ToList();

            apply.Count.ShouldEqual(applies ? 1 : 0);
            apply.Contains(plugin).ShouldEqual(applies);
        }
示例#11
0
        public void Should_register_conditional_plugins_in_container()
        {
            var instance  = new Plugin1();
            var container = new Container();
            var plugin1   = ConditionalPlugin <IPluginType, Context> .Create(instance, x => false, true);

            var plugin2 = ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false, true);

            var plugins = new ConditionalPlugins <IPluginType, Context>(true);

            plugins.Append(plugin1).Append(plugin2);

            container.RegisterPlugins(plugins);

            var instances = container.GetInstances <IPluginType>();

            instances.Count().ShouldEqual(2);
            instances.ShouldContain(instance);
        }
示例#12
0
        public void Should_register_conditional_plugins_with_registry()
        {
            var instance = new Plugin1();
            var registry = new Registry(new TypeCache());
            var plugin1  = ConditionalPlugin <IPluginType, Context> .Create(instance, x => false, true);

            var plugin2 = ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false, true);

            var plugins = new ConditionalPlugins <IPluginType, Context>(true);

            plugins.Append(plugin1).Append(plugin2);

            registry.RegisterPlugins(plugins);

            registry.Count().ShouldEqual(2);

            Should_be_plugin_instance(registry.First(), instance);
            Should_be_plugin_type <Plugin2>(registry.Second());
        }
示例#13
0
        public void Should_prepend_instance_plugin_before_another(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool dispose,
            [Values(true, false)] bool orPrepend,
            [Values(true, false)] bool when)
        {
            var instance3 = new Plugin3();

            _pluginsDsl.Append <Plugin1>();
            _pluginsDsl.Append <Plugin2>();

            RunInScope(when, (dsl, p) =>
            {
                var prependDsl = dsl.Prepend(instance3, p, dispose, @default);

                if (orPrepend)
                {
                    prependDsl.BeforeOrPrepend <Plugin2>();
                }
                else
                {
                    prependDsl.BeforeOrAppend <Plugin2>();
                }
            });

            _plugins.Count().ShouldEqual(3);

            _plugins.First().Type.ShouldEqual(typeof(Plugin1));

            var appended = _plugins.Second();

            appended.Type.ShouldEqual(typeof(Plugin3));
            appended.Instance.ShouldEqual(instance3);
            appended.Dispose.ShouldEqual(dispose);
            appended.AppliesTo.ShouldEqual(_predicate);

            _plugins.Third().Type.ShouldEqual(typeof(Plugin2));

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create(instance3, x => false))
            .ShouldEqual(@default);
        }
示例#14
0
        public void Should_append_type_plugin_after_another(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool orAppend,
            [Values(true, false)] bool when)
        {
            var instance1 = new Plugin1();

            _pluginsDsl.Append(instance1);
            _pluginsDsl.Append <Plugin2>();

            RunInScope(when, (dsl, p) =>
            {
                var appendDsl = dsl.Append <Plugin3>(_predicate, @default);

                if (orAppend)
                {
                    appendDsl.AfterOrAppend <Plugin1>();
                }
                else
                {
                    appendDsl.AfterOrPrepend <Plugin1>();
                }
            });

            _plugins.Count().ShouldEqual(3);

            _plugins.First().Type.ShouldEqual(typeof(Plugin1));

            var appended = _plugins.Second();

            appended.Type.ShouldEqual(typeof(Plugin3));
            appended.Singleton.ShouldBeTrue();
            appended.AppliesTo.ShouldEqual(_predicate);

            _plugins.Third().Type.ShouldEqual(typeof(Plugin2));

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create <Plugin3>(x => false))
            .ShouldEqual(@default);
        }
示例#15
0
        public void Should_not_return_instances_by_plugin_context_that_are_not_registered_in_the_plugin_list(
            [Values(true, false)] bool isRegistered)
        {
            var plugin = new ConditionalPlugin {
                DoesApply = true
            };

            var instances = new IConditionalPluginType[] { plugin };

            var plugins = new ConditionalPlugins <IConditionalPluginType, PluginContext>(false);

            if (isRegistered)
            {
                plugins.Configure(x => x
                                  .Append <ConditionalPlugin>());
            }

            var apply = plugins.ThatApply(instances, new PluginContext()).ToList();

            apply.Count.ShouldEqual(isRegistered ? 1 : 0);
            apply.Contains(plugin).ShouldEqual(isRegistered);
        }
示例#16
0
        public void Should_replace_or_append_specified_type_with_type_plugin(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool when)
        {
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin1>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin2>(x => false));
            _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create(new Plugin2(), x => false));

            RunInScope(when, (dsl, p) => dsl.Replace <Plugin2>().WithOrAppend <Plugin3>(p, @default));

            _plugins.Count().ShouldEqual(2);
            _plugins.First().Type.ShouldEqual(typeof(Plugin1));

            var replacement = _plugins.Second();

            replacement.Type.ShouldEqual(typeof(Plugin3));
            replacement.Singleton.ShouldBeTrue();
            replacement.AppliesTo.ShouldEqual(_predicate);

            _plugins.IsDefault(ConditionalPlugin <IPluginType, Context>
                               .Create <Plugin3>(x => false))
            .ShouldEqual(@default);
        }