public void MixinKindProperty()
        {
            var c1 = MixinContextObjectMother.Create(mixinKind: MixinKind.Extending);
            var c2 = MixinContextObjectMother.Create(mixinKind: MixinKind.Used);

            Assert.That(c1.MixinKind, Is.EqualTo(MixinKind.Extending));
            Assert.That(c2.MixinKind, Is.EqualTo(MixinKind.Used));
        }
        public void ExplicitDependencies_Empty()
        {
            var mixinContext = MixinContextObjectMother.Create(explicitDependencies: Enumerable.Empty <Type> ());

            Assert.That(mixinContext.ExplicitDependencies.Count, Is.EqualTo(0));
            Assert.That(mixinContext.ExplicitDependencies, Has.No.Member(typeof(IBaseType2)));

            Assert.That(mixinContext.ExplicitDependencies, Is.Empty);
        }
        public void ExplicitMixinDependencies_NonEmpty()
        {
            var mixinContext = MixinContextObjectMother.Create(explicitDependencies: new[] { typeof(BT6Mixin2), typeof(BT6Mixin3 <>) });

            Assert.That(mixinContext.ExplicitDependencies.Count, Is.EqualTo(2));
            Assert.That(mixinContext.ExplicitDependencies, Has.Member(typeof(BT6Mixin2)));
            Assert.That(mixinContext.ExplicitDependencies, Has.Member(typeof(BT6Mixin3 <>)));

            Assert.That(mixinContext.ExplicitDependencies, Is.EquivalentTo(new[] { typeof(BT6Mixin2), typeof(BT6Mixin3 <>) }));
        }
 public void SetUp()
 {
     _mcObject          = MixinContextObjectMother.Create(mixinType: typeof(object));
     _mcString          = MixinContextObjectMother.Create(mixinType: typeof(string));
     _mcList            = MixinContextObjectMother.Create(mixinType: typeof(List <int>));
     _mcGeneric         = MixinContextObjectMother.Create(mixinType: typeof(DerivedGenericMixin <object>));
     _mcDerived         = MixinContextObjectMother.Create(mixinType: typeof(DerivedNullMixin));
     _collection        = new MixinContextCollection(new[] { _mcObject, _mcString, _mcList, _mcDerived });
     _genericCollection = new MixinContextCollection(new[] { _mcGeneric });
 }
        public void ApplyMixinDependencies_NotFound()
        {
            var originalMixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(object), explicitDependencies: new[] { typeof(int) });
            var originalClassContext  = ClassContextObjectMother.Create(typeof(NullTarget), originalMixinContext1);
            var dependencies          = new[] { new MixinDependencySpecification(typeof(string), new[] { typeof(float) }) };

            Assert.That(
                () => originalClassContext.ApplyMixinDependencies(dependencies),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "The mixin 'System.String' is not configured for class 'Remotion.Mixins.UnitTests.Core.TestDomain.NullTarget'."));
        }
예제 #6
0
        public void Roundtrip_WithPublicVisibility_IntegrationTest()
        {
            var classContext = new ClassContext(
                typeof(BaseType1),
                new[] { MixinContextObjectMother.Create() },
                Enumerable.Empty <Type>());
            var attribute     = CreateAttribute(classContext);
            var classContext2 = attribute.GetClassContext();

            Assert.That(classContext2, Is.EqualTo(classContext));
        }
        public void Serialize()
        {
            var context = MixinContextObjectMother.Create();

            var serializer = MockRepository.GenerateMock <IMixinContextSerializer> ();

            context.Serialize(serializer);

            serializer.AssertWasCalled(mock => mock.AddMixinKind(context.MixinKind));
            serializer.AssertWasCalled(mock => mock.AddMixinType(context.MixinType));
            serializer.AssertWasCalled(mock => mock.AddIntroducedMemberVisibility(context.IntroducedMemberVisibility));
            serializer.AssertWasCalled(mock => mock.AddExplicitDependencies(Arg <IEnumerable <Type> > .List.Equal(context.ExplicitDependencies)));
            serializer.AssertWasCalled(mock => mock.AddOrigin(context.Origin));
        }
        public void ApplyAdditionalExplicitDependencies()
        {
            var context = MixinContextObjectMother.Create(explicitDependencies: new[] { typeof(int), typeof(double) });

            var result = context.ApplyAdditionalExplicitDependencies(new[] { typeof(string), typeof(double), typeof(float), typeof(float) });

            Assert.That(result.ExplicitDependencies, Is.EquivalentTo(new[] { typeof(int), typeof(double), typeof(string), typeof(float) }));
            Assert.That(context.ExplicitDependencies, Is.EquivalentTo(new[] { typeof(int), typeof(double) }));

            Assert.That(result.MixinType, Is.SameAs(context.MixinType));
            Assert.That(result.MixinKind, Is.EqualTo(context.MixinKind));
            Assert.That(result.IntroducedMemberVisibility, Is.EqualTo(context.IntroducedMemberVisibility));
            Assert.That(result.Origin, Is.SameAs(context.Origin));
        }
        public void ApplyMixinDependencies_GenericMixin_Ambiguous()
        {
            var originalMixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(List <int>), explicitDependencies: new[] { typeof(int) });
            var originalMixinContext2 = MixinContextObjectMother.Create(mixinType: typeof(List <string>), explicitDependencies: new[] { typeof(int) });
            var originalClassContext  = ClassContextObjectMother.Create(typeof(NullTarget), originalMixinContext1, originalMixinContext2);
            var dependencies          = new[] { new MixinDependencySpecification(typeof(List <>), new[] { typeof(float) }) };

            Assert.That(
                () => originalClassContext.ApplyMixinDependencies(dependencies),
                Throws.InvalidOperationException.With.Message.EqualTo(
                    "The dependency specification for 'System.Collections.Generic.List`1[T]' applied to class "
                    + "'Remotion.Mixins.UnitTests.Core.TestDomain.NullTarget' is ambiguous; matching mixins: "
                    + "'System.Collections.Generic.List`1[System.Int32]', 'System.Collections.Generic.List`1[System.String]'."));
        }
        public void IntegrationTest()
        {
            var referenceMixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(BT1Mixin1));
            var referenceMixinContext2 = MixinContextObjectMother.Create(mixinType: typeof(BT1Mixin2));
            var referenceClassContext  = new ClassContext(typeof(BaseType1), new[] { referenceMixinContext1, referenceMixinContext2 }, new[] { typeof(DateTime) });

            var serializer = new CodeGenerationClassContextSerializer();

            referenceClassContext.Serialize(serializer);
            var expression = serializer.GetConstructorInvocationExpression();

            var compiledExpression = Expression.Lambda <Func <ClassContext> > (expression).Compile();
            var result             = compiledExpression();

            Assert.That(result, Is.EqualTo(referenceClassContext));
        }
예제 #11
0
        public void IntegrationTest()
        {
            var referenceContext = MixinContextObjectMother.Create();

            var serializer = new CodeGenerationMixinContextSerializer();

            referenceContext.Serialize(serializer);

            var expression = serializer.GetConstructorInvocationExpression();

            var compiledExpression = Expression.Lambda <Func <MixinContext> > (expression).Compile();
            var result             = compiledExpression();

            Assert.That(result, Is.EqualTo(referenceContext));
            Assert.That(result.Origin, Is.EqualTo(referenceContext.Origin));
        }
        public void Deserialize()
        {
            var expectedContext = MixinContextObjectMother.Create();

            var deserializer = MockRepository.GenerateStrictMock <IMixinContextDeserializer> ();

            deserializer.Expect(mock => mock.GetMixinType()).Return(expectedContext.MixinType);
            deserializer.Expect(mock => mock.GetMixinKind()).Return(expectedContext.MixinKind);
            deserializer.Expect(mock => mock.GetIntroducedMemberVisibility()).Return(expectedContext.IntroducedMemberVisibility);
            deserializer.Expect(mock => mock.GetExplicitDependencies()).Return(expectedContext.ExplicitDependencies);
            deserializer.Expect(mock => mock.GetOrigin()).Return(expectedContext.Origin);

            var context = MixinContext.Deserialize(deserializer);

            deserializer.VerifyAllExpectations();
            Assert.That(context, Is.EqualTo(expectedContext));
        }
        public void AddMixins()
        {
            var mixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(string), origin: MixinContextOriginObjectMother.Create(assembly: GetType().Assembly));
            var mixinContext2 = MixinContextObjectMother.Create(mixinType: typeof(object));

            _serializer.AddMixins(new[] { mixinContext1, mixinContext2 });

            // Check that the chain of serializers correctly sets up the AttributeMixinContextOriginSerializer
            var serializedMixinContexts       = ((object[])_serializer.Values[1]);
            var serializedMixinContext1       = (object[])serializedMixinContexts[1];
            var serializedMixinOrigin         = (object[])serializedMixinContext1[4];
            var serializedMixinOriginAssembly = serializedMixinOrigin[1];

            Assert.That(serializedMixinOriginAssembly, Is.EqualTo(GetType().Assembly.FullName));

            var deserializer = new AttributeClassContextDeserializer(_serializer.Values);

            Assert.That(deserializer.GetMixins().ToArray(), Is.EqualTo(new[] { mixinContext1, mixinContext2 }));
        }
        public void ApplyMixinDependencies()
        {
            var originalMixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(string), explicitDependencies: new[] { typeof(int) });
            var originalMixinContext2 = MixinContextObjectMother.Create(mixinType: typeof(DateTime), explicitDependencies: new[] { typeof(double) });
            var originalMixinContext3 = MixinContextObjectMother.Create(mixinType: typeof(object), explicitDependencies: new[] { typeof(decimal) });
            var originalClassContext  = ClassContextObjectMother.Create(typeof(NullTarget), originalMixinContext1, originalMixinContext2, originalMixinContext3);

            var dependencies =
                new[]
            {
                new MixinDependencySpecification(typeof(string), new[] { typeof(int), typeof(float), typeof(long) }),
                new MixinDependencySpecification(typeof(object), new[] { typeof(byte) }),
                new MixinDependencySpecification(typeof(string), new[] { typeof(Enum) })
            };

            var result = originalClassContext.ApplyMixinDependencies(dependencies);

            Assert.That(result, Is.Not.EqualTo(originalClassContext));
            var expectedResult = new ClassContext(
                originalClassContext.Type,
                new[]
            {
                new MixinContext(
                    originalMixinContext1.MixinKind,
                    originalMixinContext1.MixinType,
                    originalMixinContext1.IntroducedMemberVisibility,
                    new[] { typeof(int), typeof(float), typeof(long), typeof(Enum) },
                    originalMixinContext1.Origin),
                originalMixinContext2,
                new MixinContext(
                    originalMixinContext3.MixinKind,
                    originalMixinContext3.MixinType,
                    originalMixinContext3.IntroducedMemberVisibility,
                    new[] { typeof(decimal), typeof(byte) },
                    originalMixinContext3.Origin)
            },
                originalClassContext.ComposedInterfaces);

            Assert.That(result, Is.EqualTo(expectedResult));

            Assert.That(originalClassContext.Mixins[typeof(string)].ExplicitDependencies, Has.No.Member(typeof(float)), "Original is not changed");
        }
        public void ApplyMixinDependencies_GenericMixins()
        {
            var originalMixinContext1 = MixinContextObjectMother.Create(mixinType: typeof(List <>), explicitDependencies: new[] { typeof(int) });
            var originalMixinContext2 = MixinContextObjectMother.Create(mixinType: typeof(Dictionary <int, string>), explicitDependencies: new[] { typeof(double) });
            var originalClassContext  = ClassContextObjectMother.Create(typeof(NullTarget), originalMixinContext1, originalMixinContext2);

            var dependencies =
                new[]
            {
                new MixinDependencySpecification(typeof(List <>), new[] { typeof(float) }),
                new MixinDependencySpecification(typeof(Dictionary <,>), new[] { typeof(byte) })
            };

            var result = originalClassContext.ApplyMixinDependencies(dependencies);

            var expectedResult = new ClassContext(
                originalClassContext.Type,
                new[]
            {
                new MixinContext(
                    originalMixinContext1.MixinKind,
                    originalMixinContext1.MixinType,
                    originalMixinContext1.IntroducedMemberVisibility,
                    new[] { typeof(int), typeof(float) },
                    originalMixinContext1.Origin),
                new MixinContext(
                    originalMixinContext2.MixinKind,
                    originalMixinContext2.MixinType,
                    originalMixinContext2.IntroducedMemberVisibility,
                    new[] { typeof(double), typeof(byte) },
                    originalMixinContext2.Origin)
            },
                originalClassContext.ComposedInterfaces);

            Assert.That(result, Is.EqualTo(expectedResult));
        }
예제 #16
0
 private Dictionary <Type, MixinContext> CreateContextDictionary(params Type[] types)
 {
     return(types.ToDictionary(type => type, type => MixinContextObjectMother.Create(mixinType: type)));
 }
 private static MixinContext CreateBT2Mixin2Context()
 {
     return(MixinContextObjectMother.Create(mixinType: typeof(BT1Mixin2)));
 }
        public void IntroducedMemberVisibility_Public()
        {
            var context = MixinContextObjectMother.Create(introducedMemberVisibility: MemberVisibility.Public);

            Assert.That(context.IntroducedMemberVisibility, Is.EqualTo(MemberVisibility.Public));
        }