Ejemplo n.º 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);
        }
Ejemplo n.º 2
0
        public void Should_return_plugin_instances_that_apply_to_context()
        {
            var plugin1a = new Plugin1a();
            var plugin1b = new Plugin1b();
            var plugin2  = new Plugin2();
            var plugin3  = new Plugin3();
            var plugin4  = new Plugin4();

            var instances = new IPluginType[] { plugin1a, plugin1b, plugin2, plugin3, plugin4 };

            var plugins = new ConditionalPlugins <IPluginType, Context>(false)
                          .Configure(x => x
                                     .Append <Plugin1a>(c => c.Value == 1)
                                     .Append <Plugin1b>(c => c.Value == 1)
                                     .Append <Plugin2>(c => c.Value == 2)
                                     .Append <Plugin3>());

            var apply = plugins.ThatApplyTo(instances, new Context {
                Value = 1
            }).ToList();

            apply.Count.ShouldEqual(3);
            apply[0].Instance.ShouldEqual(plugin1a);
            apply[1].Instance.ShouldEqual(plugin1b);
            apply[2].Instance.ShouldEqual(plugin3);

            apply = plugins.ThatApplyTo(instances, new Context {
                Value = 2
            }).ToList();

            apply.Count.ShouldEqual(2);
            apply[0].Instance.ShouldEqual(plugin2);
            apply[1].Instance.ShouldEqual(plugin3);
        }
Ejemplo n.º 3
0
        public void Should_get_the_default_instance()
        {
            var plugin1 = new Plugin1();
            var plugin2 = new Plugin2();
            var plugin3 = new Plugin3();
            var plugin4 = new Plugin4();

            var instances = new IPluginType[] { plugin1, plugin2, plugin3, plugin4 };

            var plugins = new ConditionalPlugins <IPluginType, Context>(false)
                          .Configure(x => x
                                     .Append <Plugin1>()
                                     .Append <Plugin2>(@default: true)
                                     .Append <Plugin3>(@default: true)
                                     .Append <Plugin4>());

            plugins.GetDefaultInstance(instances).ShouldEqual(plugin3);
        }
Ejemplo n.º 4
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);
        }
Ejemplo n.º 5
0
        public void Should_replace_or_prepend_specified_type_with_instance_plugin(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool dispose)
        {
            var instance3 = new Plugin3();

            _plugins.Append(Plugin <IPluginType> .Create <Plugin1>());
            _plugins.Append(Plugin <IPluginType> .Create <Plugin2>());
            _plugins.Append(Plugin <IPluginType> .Create(new Plugin2()));

            _pluginsDsl.Replace <Plugin2>().WithOrPrepend(instance3, 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);

            _plugins.IsDefault(Plugin <IPluginType> .Create(instance3))
            .ShouldEqual(@default);
        }
Ejemplo n.º 6
0
        public void Should_prepend_instance_plugin_before_another(
            [Values(true, false)] bool @default,
            [Values(true, false)] bool dispose,
            [Values(true, false)] bool orPrepend)
        {
            var instance3 = new Plugin3();

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

            var dsl = _pluginsDsl.Prepend(instance3, dispose, @default);

            if (orPrepend)
            {
                dsl.BeforeOrPrepend <Plugin2>();
            }
            else
            {
                dsl.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);

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

            _plugins.IsDefault(Plugin <IPluginType> .Create(instance3))
            .ShouldEqual(@default);
        }