public void BuildContext_NoInheritance()
        {
            _classBuilder.AddMixins <BT1Mixin1, BT1Mixin2>();
            _classBuilder.AddComposedInterfaces <IBT6Mixin1, IBT6Mixin2>();

            ClassContext builtContext = _classBuilder.BuildClassContext();

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

            Assert.That(builtContext.ComposedInterfaces.Count, Is.EqualTo(2));
            Assert.That(builtContext.ComposedInterfaces, Has.Member(typeof(IBT6Mixin1)));
            Assert.That(builtContext.ComposedInterfaces, Has.Member(typeof(IBT6Mixin2)));
        }
        public void BuildContext_ExtendParentContext()
        {
            var classContextBuilder = new ClassContextBuilder(_parentBuilderMock, typeof(BaseType2));

            classContextBuilder.AddMixins <BT1Mixin1, BT1Mixin2> ();

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

            Assert.That(builtContext.Mixins.Count, Is.EqualTo(3));
            Assert.That(builtContext.Mixins.ContainsKey(typeof(BT2Mixin1)), Is.True);
            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);
        }
        public void AddMixins_NonGeneric()
        {
            var origin = MixinContextOriginObjectMother.Create();

            _classBuilderMock.Expect(mock => mock.AddMixins(origin, typeof(BT2Mixin1), typeof(BT3Mixin1), typeof(BT3Mixin2)))
            .CallOriginalMethod(OriginalCallOptions.CreateExpectation);
            _classBuilderMock.Expect(mock => mock.AddMixin(typeof(BT2Mixin1), origin)).Return(_mixinBuilderMock);
            _classBuilderMock.Expect(mock => mock.AddMixin(typeof(BT3Mixin1), origin)).Return(_mixinBuilderMock);
            _classBuilderMock.Expect(mock => mock.AddMixin(typeof(BT3Mixin2), origin)).Return(_mixinBuilderMock);

            _mockRepository.Replay(_classBuilderMock);
            var result = _classBuilderMock.AddMixins(origin, typeof(BT2Mixin1), typeof(BT3Mixin1), typeof(BT3Mixin2));

            _mockRepository.Verify(_classBuilderMock);

            Assert.That(result, Is.SameAs(_classBuilderMock));
        }