public void Build_WithoutCachedContext_WithBuilder_WithIndirectParent()
        {
            _inheritancePolicyMock
            .Expect(mock => mock.GetClassContextsToInheritFrom(Arg <Type> .Is.Anything, Arg <Func <Type, ClassContext> > .Is.Anything))
            .Return(new ClassContext[0]);
            _inheritancePolicyMock.Replay();

            var result = _builder.Build(_classContextBuilderWithIndirectParent.TargetType);

            Assert.That(result, Is.EqualTo(_classContextBuilderWithIndirectParent.BuildClassContext(new[] { _parentContextWithBuilder })));
        }
        public void Initialization_Standalone()
        {
            var classBuilder = new ClassContextBuilder(typeof(BaseType2));

            Assert.That(classBuilder.TargetType, Is.SameAs(typeof(BaseType2)));
            Assert.That(classBuilder.Parent, Is.Not.Null);
            Assert.That(_classBuilder.MixinContextBuilders, Is.Empty);
            Assert.That(_classBuilder.ComposedInterfaces.ToArray(), Is.Empty);

            ClassContext classContext = _classBuilder.BuildClassContext(new ClassContext[0]);

            Assert.That(classContext.Mixins.Count, Is.EqualTo(0));
            Assert.That(classContext.ComposedInterfaces.Count, Is.EqualTo(0));
        }
        public void BuildContext_ReplaceParentContext()
        {
            var classContextBuilder = new ClassContextBuilder(_parentBuilderMock, typeof(BaseType2));

            classContextBuilder.Clear().AddMixins <BT1Mixin1, BT1Mixin2> ();

            var          parentContext = ClassContextObjectMother.Create(typeof(BaseType2), typeof(BT2Mixin1));
            ClassContext builtContext  = classContextBuilder.BuildClassContext(new[] { parentContext });

            Assert.That(builtContext.Mixins.Count, Is.EqualTo(2));
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT1Mixin1)), Is.True);
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT1Mixin2)), Is.True);
        }
        public void BuildContext_Suppression()
        {
            var classContextBuilder = new ClassContextBuilder(_parentBuilderMock, typeof(BaseType2));

            classContextBuilder.AddMixins <BT1Mixin1, BT1Mixin2> ();

            classContextBuilder.SuppressMixins(typeof(IBT1Mixin1), typeof(BT5Mixin1), typeof(BT3Mixin3 <,>));

            var          inheritedContext = ClassContextObjectMother.Create(typeof(BaseType2), typeof(BT3Mixin1), typeof(BT3Mixin3 <IBaseType33, IBaseType33>));
            var          parentContext    = ClassContextObjectMother.Create(typeof(BaseType2), typeof(BT5Mixin1), typeof(BT5Mixin2));
            ClassContext builtContext     = classContextBuilder.BuildClassContext(new[] { inheritedContext, parentContext });

            Assert.That(builtContext.Mixins.Count, Is.EqualTo(3));
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT3Mixin1)), Is.True);
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT5Mixin2)), Is.True);
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT1Mixin2)), Is.True);
        }