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); }
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); }
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); }
public void Should_clear_plugins() { _plugins.Append(ConditionalPlugin <IPluginType, Context> .Create <Plugin1>(x => false)); _plugins.Count().ShouldEqual(1); _pluginsDsl.Clear(); _plugins.ShouldBeEmpty(); }
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)); }
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)); }
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); }
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_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); }
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); }
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); }
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); }