public void Should_select_plugin_instances_that_apply_in_order() { var instance3 = new SomeImplementation3(); _definitions.Append <SomeImplementation4>() .Append <SomeImplementation1>(x => x.SomeValue < 6) .Append <SomeImplementation2>(x => x.SomeValue > 5) .Append(instance3); var definitions = _definitions.ThatApplyTo(new List <ISomePlugin> { new SomeImplementation1(), new SomeImplementation2(), new SomeImplementation3(), new SomeImplementation3(), new SomeImplementation4(x => x.SomeValue > 5), new SomeImplementation5(x => x.SomeValue < 6), null }, new SomePluginContext { SomeValue = 5 }).ToList(); definitions.Count.ShouldEqual(4); definitions[0].GetType().ShouldEqual(typeof(SomeImplementation1)); definitions[1].GetType().ShouldEqual(typeof(SomeImplementation3)); definitions[2].GetType().ShouldEqual(typeof(SomeImplementation3)); definitions[3].GetType().ShouldEqual(typeof(SomeImplementation5)); }
public void Should_prepend_a_plugin_before_another_and_remove_existing() { var instance2 = new SomeImplementation2(); var instance3 = new SomeImplementation3(); _definitions.Append <SomeImplementation1>() .Append(instance2) .Append <SomeImplementation3>() .Append <SomeImplementation4>(); _definitions.Prepend(instance3).Before <SomeImplementation1>(); _definitions.Prepend <SomeImplementation4>().Before <SomeImplementation2>(); var definitions = _definitions.ToList(); _definitions.Count().ShouldEqual(4); definitions[0].HasInstance.ShouldBeTrue(); definitions[0].Instance.ShouldEqual(instance3); definitions[1].HasInstance.ShouldBeFalse(); definitions[1].Type.ShouldEqual(typeof(SomeImplementation1)); definitions[2].HasInstance.ShouldBeFalse(); definitions[2].Type.ShouldEqual(typeof(SomeImplementation4)); definitions[3].HasInstance.ShouldBeTrue(); definitions[3].Instance.ShouldEqual(instance2); }
public void Should_select_plugin_defintions_that_apply_in_order() { var instance3 = new SomeImplementation3(); _definitions .Append <SomeImplementation1>(x => x.SomeValue < 6) .Append <SomeImplementation2>(x => x.SomeValue > 5) .Append(instance3); var definitions = _definitions.ThatApplyTo(new SomePluginContext { SomeValue = 5 }).ToList(); definitions.Count.ShouldEqual(2); definitions[0].HasInstance.ShouldBeFalse(); definitions[0].Type.ShouldEqual(typeof(SomeImplementation1)); definitions[1].HasInstance.ShouldBeTrue(); definitions[1].Instance.ShouldEqual(instance3); }