Example #1
0
        public void Should_return_instances_that_apply(
            [Values(true, false)] bool orDefault)
        {
            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 Plugins <IConditionalPluginType>(false)
                          .Configure(x => x
                                     .Append <ConditionalPlugin1>()
                                     .Append <ConditionalPlugin2>()
                                     .Append <ConditionalPlugin3>());

            var apply = (orDefault
                ? plugins.ThatApplyOrDefault(instances)
                : plugins.ThatApply(instances)).ToList();

            apply.ShouldOnlyContain(plugin2, plugin3);
        }
Example #2
0
        public void Should_return_instances_that_apply_to_plugin_context_when_they_exist_and_not_the_default()
        {
            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.ThatAppliesOrDefault(instances, new PluginContext {
                Value = 1
            });

            applies.ShouldOnlyContain(plugin2, plugin3);
        }
Example #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);
        }
Example #4
0
        public void Should_return_instances_that_apply_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>()
                                     .Append <ConditionalPlugin2>()
                                     .Append <ConditionalPlugin3>(c => c.Value == 1));

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

            apply.ShouldOnlyContain(plugin2, plugin3);
        }
Example #5
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();
        }
Example #6
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);
        }
Example #7
0
        public void Should_return_default_instances_if_non_apply()
        {
            var plugin1 = new ConditionalPlugin1 {
                DoesApply = false
            };
            var plugin2 = new ConditionalPlugin2 {
                DoesApply = false
            };

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

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

            var apply = plugins.ThatApplyOrDefault(instances).ToList();

            apply.ShouldOnlyContain(plugin2);
        }
Example #8
0
        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);
        }
Example #9
0
        public void Should_return_list_only_containing_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.ThatAppliesOrDefault(instances, new PluginContext());

            applies.ShouldOnlyContain(plugin3);
        }