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_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_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_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_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); }
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); }