public void SetUp()
        {
            _classContextBuilderWithParent = new ClassContextBuilder(typeof(NullTarget));
            _classContextBuilderWithParent.AddMixin(typeof(NullMixin2));
            _parentContextWithBuilder = ClassContextObjectMother.Create(typeof(NullTarget), typeof(NullMixin));

            _classContextBuilderWithIndirectParent = new ClassContextBuilder(typeof(DerivedNullTarget));

            _classContextBuilderWithoutParent = new ClassContextBuilder(typeof(BaseType4));
            _classContextBuilderWithParent.AddMixin(typeof(BT4Mixin1));

            _buildersWithParentContexts = new Dictionary <Type, Tuple <ClassContextBuilder, ClassContext> > ();
            _buildersWithParentContexts.Add(_classContextBuilderWithParent.TargetType, Tuple.Create(_classContextBuilderWithParent, _parentContextWithBuilder));
            _buildersWithParentContexts.Add(_classContextBuilderWithoutParent.TargetType, Tuple.Create(_classContextBuilderWithoutParent, (ClassContext)null));

            _parentContextWithoutBuilder = ClassContextObjectMother.Create(typeof(BaseType1));
            _parentContexts = new ClassContextCollection(_parentContextWithoutBuilder, _parentContextWithBuilder);

            _inheritancePolicyMock = MockRepository.GenerateMock <IMixinInheritancePolicy> ();
            _inheritedContext      = ClassContextObjectMother.Create(typeof(object), typeof(NullMixin));

            var classContextBuilders = new[] { _classContextBuilderWithoutParent, _classContextBuilderWithIndirectParent, _classContextBuilderWithParent };

            _builder = new InheritanceResolvingClassContextBuilder(classContextBuilders, _parentContexts, _inheritancePolicyMock);
        }
        public void AddMixin_NonGeneric_WithoutOrigin()
        {
            var expectedOrigin = MixinContextOrigin.CreateForMethod(MethodBase.GetCurrentMethod());

            _classBuilderMock.Expect(mock => mock.AddMixin(typeof(BT2Mixin1), expectedOrigin)).Return(_mixinBuilderMock);

            _mockRepository.Replay(_classBuilderMock);
            Assert.That(_classBuilderMock.AddMixin(typeof(BT2Mixin1)), Is.SameAs(_mixinBuilderMock));
            _mockRepository.Verify(_classBuilderMock);
        }
        public void AddMixin_NonGeneric()
        {
            var origin = MixinContextOriginObjectMother.Create();
            MixinContextBuilder mixinBuilder = _classBuilder.AddMixin(typeof(BT2Mixin1), origin);

            Assert.That(mixinBuilder.MixinType, Is.SameAs(typeof(BT2Mixin1)));
            Assert.That(mixinBuilder.Parent, Is.SameAs(_classBuilder));
            Assert.That(mixinBuilder.Origin, Is.SameAs(origin));
            Assert.That(_classBuilder.MixinContextBuilders, Has.Member(mixinBuilder));
        }
        public void Clear()
        {
            var classBuilder = new ClassContextBuilder(_parentBuilderMock, typeof(BaseType1));

            classBuilder.AddMixin <BT1Mixin2> ();
            classBuilder.AddComposedInterface <IBaseType31> ();

            Assert.That(classBuilder.MixinContextBuilders, Is.Not.Empty);
            Assert.That(classBuilder.ComposedInterfaces, Is.Not.Empty);
            Assert.That(classBuilder.SuppressInheritance, Is.False);

            Assert.That(classBuilder.Clear(), Is.SameAs(classBuilder));
            Assert.That(classBuilder.MixinContextBuilders, Is.Empty);
            Assert.That(classBuilder.ComposedInterfaces.ToArray(), Is.Empty);
            Assert.That(classBuilder.SuppressInheritance, Is.True);
        }