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); }
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); }
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); }
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); }
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); }
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)); }
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()); }
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_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); }
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); }
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); }
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()); }
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(); }
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); }
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); }
public void Setup() { _plugins = new ConditionalPlugins <IPluginType, Context>(true); _pluginsDsl = new ConditionalPluginsDsl <IPluginType, Context>(_plugins); }