示例#1
0
        public void Should_return_instances_that_apply_to_plugin_and_instance_context_when_they_exist_and_not_the_default()
        {
            var plugin1 = new ContextConditionalPlugin1 {
                DoesApplyTo = c => c.Value == 2
            };
            var plugin2 = new ContextConditionalPlugin2 {
                DoesApplyTo = c => c.Value == 1
            };
            var plugin3 = new ContextConditionalPlugin3 {
                DoesApplyTo = c => c.Value == 1
            };

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

            var plugins = new ConditionalPlugins <IContextConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ContextConditionalPlugin1>(@default: true)
                                     .Append <ContextConditionalPlugin2>(c => c.Value == 1)
                                     .Append <ContextConditionalPlugin3>(c => c.Value == 1));

            var applies = plugins.ThatAppliesToOrDefault(instances,
                                                         new PluginContext {
                Value = 1
            },
                                                         new InstanceContext {
                Value = 1
            });

            applies.ShouldOnlyContain(plugin2, plugin3);
        }
示例#2
0
        public void Should_return_list_only_containing_last_default_if_no_instances_appy_to_plugin_and_instance_context_and_a_default_is_specified()
        {
            var plugin1 = new ContextConditionalPlugin1 {
                DoesApplyTo = c => false
            };
            var plugin2 = new ContextConditionalPlugin2 {
                DoesApplyTo = c => false
            };
            var plugin3 = new ContextConditionalPlugin3 {
                DoesApplyTo = c => false
            };

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

            var plugins = new ConditionalPlugins <IContextConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ContextConditionalPlugin1>()
                                     .Append <ContextConditionalPlugin2>(@default: true)
                                     .Append <ContextConditionalPlugin3>(@default: true));

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

            applies.ShouldOnlyContain(plugin3);
        }
示例#3
0
        public void Should_return_first_instance_that_applies_to_plugin_context()
        {
            var plugin1 = new ConditionalPlugin1 {
                DoesApply = false
            };
            var plugin2 = new ConditionalPlugin2 {
                DoesApply = true
            };
            var plugin3 = new ConditionalPlugin3 {
                DoesApply = true
            };

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

            var plugins = new ConditionalPlugins <IConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ConditionalPlugin1>(@default: true)
                                     .Append <ConditionalPlugin2>(c => c.Value == 1)
                                     .Append <ConditionalPlugin3>(c => c.Value == 1));

            var applies = plugins.FirstThatAppliesOrDefault(instances, new PluginContext {
                Value = 1
            });

            applies.ShouldEqual(plugin2);
        }
示例#4
0
        public void Should_return_instances_that_apply_to_plugin_and_instance_context()
        {
            var plugin1 = new ContextConditionalPlugin1 {
                DoesApplyTo = c => c.Value == 1
            };
            var plugin2 = new ContextConditionalPlugin2 {
                DoesApplyTo = c => c.Value == 2
            };
            var plugin3 = new ContextConditionalPlugin3 {
                DoesApplyTo = c => c.Value == 2
            };

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

            var plugins = new ConditionalPlugins <IContextConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ContextConditionalPlugin1>()
                                     .Append <ContextConditionalPlugin2>()
                                     .Append <ContextConditionalPlugin3>(c => c.Value == 1));

            var apply = plugins.ThatAppliesTo(instances,
                                              new PluginContext {
                Value = 1
            },
                                              new InstanceContext {
                Value = 2
            }).ToList();

            apply.ShouldOnlyContain(plugin2, plugin3);
        }
示例#5
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);
        }
示例#6
0
        public void Should_return_plugins_that_apply_to_context()
        {
            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(new Context {
                Value = 1
            }).ToList();

            apply.Count.ShouldEqual(3);
            apply[0].Type.ShouldEqual(typeof(Plugin1a));
            apply[1].Type.ShouldEqual(typeof(Plugin1b));
            apply[2].Type.ShouldEqual(typeof(Plugin3));

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

            apply.Count.ShouldEqual(2);
            apply[0].Type.ShouldEqual(typeof(Plugin2));
            apply[1].Type.ShouldEqual(typeof(Plugin3));
        }
示例#7
0
        public static List <Type> ThatApplyTo(this ConditionalPlugins
                                              <IBehavior, ActionConfigurationContext> behaviors,
                                              ActionMethod actionMethod, RouteDescriptor routeDescriptor,
                                              Configuration configuration, HttpConfiguration httpConfiguration)
        {
            var context = new ActionConfigurationContext(configuration,
                                                         httpConfiguration, actionMethod, routeDescriptor);

            return(behaviors.ThatApplyTo(context)
                   .Select(x => x.Type).ToList());
        }
示例#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();
        }
示例#9
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);
        }
示例#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_return_null_if_no_instances_appy_to_plugin_and_instance_context_and_no_default_is_specified()
        {
            var plugin = new ContextConditionalPlugin {
                DoesApplyTo = c => false
            };

            var instances = new IContextConditionalPluginType[] { plugin };

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

            var applies = plugins.FirstThatAppliesToOrDefault(instances,
                                                              new PluginContext {
                Value = 1
            },
                                                              new InstanceContext {
                Value = 1
            });

            applies.ShouldBeNull();
        }
示例#14
0
        public void Should_not_return_instances_by_plugin_context_and_instance_that_are_not_registered_in_the_plugin_list(
            [Values(true, false)] bool isRegistered)
        {
            var plugin = new ContextConditionalPlugin {
                DoesApplyTo = c => true
            };

            var instances = new IContextConditionalPluginType[] { plugin };

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

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

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

            apply.Count.ShouldEqual(isRegistered ? 1 : 0);
            apply.Contains(plugin).ShouldEqual(isRegistered);
        }
示例#15
0
        public void Should_return_last_default_if_no_instances_appy_to_plugin_context_and_a_default_is_specified()
        {
            var plugin1 = new ConditionalPlugin1 {
                DoesApply = false
            };
            var plugin2 = new ConditionalPlugin2 {
                DoesApply = false
            };
            var plugin3 = new ConditionalPlugin3 {
                DoesApply = false
            };

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

            var plugins = new ConditionalPlugins <IConditionalPluginType, PluginContext>(false)
                          .Configure(x => x
                                     .Append <ConditionalPlugin1>()
                                     .Append <ConditionalPlugin2>(@default: true)
                                     .Append <ConditionalPlugin3>(@default: true));

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

            applies.ShouldEqual(plugin3);
        }
示例#16
0
 public void Setup()
 {
     _plugins    = new ConditionalPlugins <IPluginType, Context>(true);
     _pluginsDsl = new ConditionalPluginsDsl <IPluginType, Context>(_plugins);
 }